]> git.cameronkatri.com Git - mandoc.git/log
mandoc.git
11 years agoFix mandocdb(8) -d and -u.
Ingo Schwarze [Mon, 6 Jan 2014 15:32:47 +0000 (15:32 +0000)]
Fix mandocdb(8) -d and -u.
It was broken by recent optimizations.

11 years agoRename dbindex() to dbadd() to be less confusing.
Ingo Schwarze [Mon, 6 Jan 2014 13:54:17 +0000 (13:54 +0000)]
Rename dbindex() to dbadd() to be less confusing.
The concept of an index file is gone since the switch to SQLite.
No functional change.

11 years agoRemove the redundant "file" column from the "mlinks" table.
Ingo Schwarze [Mon, 6 Jan 2014 03:52:13 +0000 (03:52 +0000)]
Remove the redundant "file" column from the "mlinks" table.
The contents can easily be reconstructed from sec, arch, name, form.
Shrinks the database by another 3% in standard mode and 9% in -Q mode.

11 years agoDrop Nd from the mpages table, it is still in the keys table.
Ingo Schwarze [Mon, 6 Jan 2014 03:02:46 +0000 (03:02 +0000)]
Drop Nd from the mpages table, it is still in the keys table.
This shrinks the database in standard mode by 3%, in -Q mode by 9%,
without loss of functionality.

11 years agoJoerg Sonnenberger contributed copyrightable amounts of text to
Ingo Schwarze [Mon, 6 Jan 2014 00:53:33 +0000 (00:53 +0000)]
Joerg Sonnenberger contributed copyrightable amounts of text to
some files.  To make it clear that he also put his contributions
under the ISC license, with his explicit permission, add his
Copyright notice to the relevant files.  No code change.

11 years agoCope with mparse_alloc() interface change.
Ingo Schwarze [Sun, 5 Jan 2014 20:41:04 +0000 (20:41 +0000)]
Cope with mparse_alloc() interface change.

11 years agoAdd an option -Q (quick) to mandocdb(8)
Ingo Schwarze [Sun, 5 Jan 2014 20:26:36 +0000 (20:26 +0000)]
Add an option -Q (quick) to mandocdb(8)
for accelerated generation of reduced-size databases.

Implement this by allowing the parsers to optionally
abort the parse sequence after the NAME section.

While here, garbage collect the unused void *arg attribute of
struct mparse and mparse_alloc() and fix some errors in mandoc(3).

This reduces the processing time of mandocdb(8) on /usr/share/man
by a factor of 2 and the database size by a factor of 4.
However, it still takes 5 times the time and 6 times the space
of makewhatis(8), so more work is clearly needed.

11 years agoTag functions with format strings as arguments as printf-like.
Joerg Sonnenberger [Sun, 5 Jan 2014 19:10:56 +0000 (19:10 +0000)]
Tag functions with format strings as arguments as printf-like.
Fix one case where a non-literal is used as format string.
Fix another case where a variable is formatted using the wrong type.

11 years agoMerge NetBSD's r1.4: Rename data to getdata to work around bugs in the
Joerg Sonnenberger [Sun, 5 Jan 2014 18:37:53 +0000 (18:37 +0000)]
Merge NetBSD's r1.4: Rename data to getdata to work around bugs in the
PPC64 toolchain.

11 years agoRip out the complete "reachable" checks, without replacement.
Ingo Schwarze [Sun, 5 Jan 2014 04:48:40 +0000 (04:48 +0000)]
Rip out the complete "reachable" checks, without replacement.
It's a pity i spent time during t2k13 writing this; however,
when an entire concept is busted, let us not look back,

There is no such thing as an unreachable page.  Even if you are crazy
enough to put a page starting with ".Dt NAMEI 9" into a file man1/cat.1,
we now make sure that it can be found by all of the following:
Nm=namei Nm=cat sec=1 sec=9
It will always be displayed as:
cat(1) - pathname lookup
So you know that you have to type `man cat` to get at it.
That obsoletes the concept of "unreachable manuals" for good.

11 years agoRemove the obsolete file name column from the mpages table.
Ingo Schwarze [Sun, 5 Jan 2014 04:13:52 +0000 (04:13 +0000)]
Remove the obsolete file name column from the mpages table.
This column wasn't helpful because one manpage can have multiple MLINKS.
Use the file name column in the mlinks table, instead.

11 years agoRemove the obsolete sec and arch columns from the mpages table.
Ingo Schwarze [Sun, 5 Jan 2014 03:25:51 +0000 (03:25 +0000)]
Remove the obsolete sec and arch columns from the mpages table.
They were confusing because a manpage can have MLINKS in different
sections and architectures.

11 years agoReimplement apropos -s NUM -S ARCH EXPR by internally converting it to
Ingo Schwarze [Sun, 5 Jan 2014 03:06:43 +0000 (03:06 +0000)]
Reimplement apropos -s NUM -S ARCH EXPR by internally converting it to
apropos \( EXPR \) -a 'sec~^NUM$' -a 'arch~^(ARCH|any)$'
in preparation for removal of sec and arch from the mpage table.

Almost no functional change except for the following bonus:
This also makes sure that for cross-section and cross-arch MLINKs,
all of the following work:
apropos -s 1 encrypt
apropos -s 8 encrypt
apropos -s 1 makekey
apropos -s 8 makekey

While here, print error messages about invalid regexps to stderr.

11 years agoPut section and architecture info into the keys table,
Ingo Schwarze [Sun, 5 Jan 2014 00:29:54 +0000 (00:29 +0000)]
Put section and architecture info into the keys table,
in preparation for removing them from the mpages table,
aiming for cleaner and more uniform interfaces.
Database growth is below 4%, part of which will be reclaimed.

As a bonus, this allows searches like:
./obj/apropos An=kettenis -a arch=ppc
./obj/apropos An=kettenis -a sec~[^4]

11 years agoNew implementation of complex search criteria using \(, \), -a because
Ingo Schwarze [Sat, 4 Jan 2014 23:43:53 +0000 (23:43 +0000)]
New implementation of complex search criteria using \(, \), -a because
the old implementation got lost in the Berkeley to SQLite switch.
Note that this is not just feature creep, but required for upcoming
database format cleanup and simplification.

11 years agoPut mansearch.{h,c}, manpage.c, and compat_ohash.{h,c}
Ingo Schwarze [Sat, 4 Jan 2014 15:00:02 +0000 (15:00 +0000)]
Put mansearch.{h,c}, manpage.c, and compat_ohash.{h,c}
into the distribution tarball.  Bump VERSION.

11 years agoPut ./configure into the distributin tarball.
Ingo Schwarze [Sat, 4 Jan 2014 14:45:54 +0000 (14:45 +0000)]
Put ./configure into the distributin tarball.

11 years agoUse C99 uint32_t, not BSD-style u_int32_t.
Ingo Schwarze [Sat, 4 Jan 2014 14:09:28 +0000 (14:09 +0000)]
Use C99 uint32_t, not BSD-style u_int32_t.
Needed for Solaris 10 as reported by Matthias Scheler.

11 years agoEven though strnlen(3) is required by POSIX 2008,
Ingo Schwarze [Sat, 4 Jan 2014 13:40:01 +0000 (13:40 +0000)]
Even though strnlen(3) is required by POSIX 2008,
Matthias Scheler reports than Solaris 10 lacks it.
While here, sort the declarations in config.h
and move the headers to the top.

11 years agoClean up feature tests:
Ingo Schwarze [Sat, 4 Jan 2014 01:11:00 +0000 (01:11 +0000)]
Clean up feature tests:
* Split the configure steering script out of the Makefile.
* Let the configure step depend on the test sources.
* Clean up the test programs such that they can be run.

11 years agoAvoid "utf8" in the names of a function and a struct member
Ingo Schwarze [Thu, 2 Jan 2014 22:44:10 +0000 (22:44 +0000)]
Avoid "utf8" in the names of a function and a struct member
that don't necessarily have anything to do with UTF-8.
Just renaming, no functional change.

11 years agoDo not put UTF-8-encoded strings into the database by default, use ASCII.
Ingo Schwarze [Thu, 2 Jan 2014 22:19:41 +0000 (22:19 +0000)]
Do not put UTF-8-encoded strings into the database by default, use ASCII.
Just like for mandoc(1), provide a -Tutf8 option for people who want that.

11 years agoPolish the mlink_add() interface:
Ingo Schwarze [Thu, 2 Jan 2014 20:24:39 +0000 (20:24 +0000)]
Polish the mlink_add() interface:
Allocate memory inside, not in the callers.
No functional change.

11 years agoCheck all MLINKS for consistency with the content of the manual page,
Ingo Schwarze [Thu, 2 Jan 2014 18:52:15 +0000 (18:52 +0000)]
Check all MLINKS for consistency with the content of the manual page,
not just the first one.  This doesn't change how the check is done,
but just which MLINKS are checked.

11 years agoSince the functions in read.c are part of the mandoc(3) library,
Ingo Schwarze [Thu, 2 Jan 2014 16:29:55 +0000 (16:29 +0000)]
Since the functions in read.c are part of the mandoc(3) library,
do not print to stderr.  Instead, properly use the mmsg callback.
Issue noticed by Abhinav Upadhyay <er dot abhinav dot upadhyay
at gmail dot com> and Thomas Klausner <wiz at NetBSD>.

11 years agoSupport .St -p1003.1-2013, "IEEE Std 1003.1-2008/Cor 1-2013".
Ingo Schwarze [Tue, 31 Dec 2013 23:29:41 +0000 (23:29 +0000)]
Support .St -p1003.1-2013, "IEEE Std 1003.1-2008/Cor 1-2013".

Note that the POSIX-2008 standard remains in force, so please refrain
from wholesale 2008 -> 2013 replacements.  Make sure to only use the
new -p1003.1-2013 argument for cases where "IEEE Std 1003.1(TM)-2008/
Cor 1-2013, IEEE Standard for Information Technology--Portable
Operating System Interface (POSIX(R)), Technical Corrigendum 1"
actually changes something in the standard with respect to the
specific function documented in the manual you touch.  Otherwise,
please continue using .St -p1003.1-2008.

Triggered by a similar, but slightly incorrect patch from jmc@;
ok guenther@.

11 years agoSimplify: Remove an unused argument from the mandoc_eos() function.
Ingo Schwarze [Tue, 31 Dec 2013 23:23:10 +0000 (23:23 +0000)]
Simplify: Remove an unused argument from the mandoc_eos() function.
No functional change.

11 years agoProvide strcasestr(3) and strsep(3) for Solaris 10 compat;
Ingo Schwarze [Tue, 31 Dec 2013 23:03:47 +0000 (23:03 +0000)]
Provide strcasestr(3) and strsep(3) for Solaris 10 compat;
reported missing by Matthias Scheler <tron at NetBSD> via wiz@.

11 years agoDo not trigger end-of-sentence spacing by trailing punctuation
Ingo Schwarze [Tue, 31 Dec 2013 22:40:12 +0000 (22:40 +0000)]
Do not trigger end-of-sentence spacing by trailing punctuation
at the end of partial implicit macros.  Prodded by jmc@.

Actually, this is a revert of rev. 1.64 Fri May 14 14:09:13 2010 UTC
by kristaps@, with this original commit message:
"Block-implicit macros now up-propogate end-of-sentence spacing.
NOTE: GROFF IS NOT SMART ENOUGH TO DO THIS."
Please speak after me: Then why the hell should we?

We already weakened this in rev. 1.93 Sun Jul 18 17:00:26 2010 UTC,
but that weakening was insufficient.  Let's take it out completely.

Admittedly, there are two places in OpenBSD base where what Kristaps
did make the output nicer, in calloc(3) and in fish(6).  But both are
atypical.  There are 18 other places where this revert makes the
output nicer, the typical case being:
"Mail status is shown as ``No Mail.''  if there is no mail."
You do *not* want the EOS spacing after ``No Mail.'' in that sentence.

11 years agoYet another regression introduced by Kristaps when he switched from
Ingo Schwarze [Tue, 31 Dec 2013 19:40:20 +0000 (19:40 +0000)]
Yet another regression introduced by Kristaps when he switched from
Berkeley DB to SQLite3: In the .In parser, the logic got inverted.
The resulting NULL pointer access was found by clang;
scan log provided by Ulrich Spoerlein <uqs at FreeBSD>.

The best fix is to simply remove the whole, pointless custom
handler function for .In and let the framework do its work.
Now searching for included header files actually works.

While here, remove the similarly pointless custom .St handler,
fix the return value of the .Fd handler and disentangle the
spaghetti in the .Nm handler.

11 years agoremove assignments that will be overwritten right afterwards,
Ingo Schwarze [Tue, 31 Dec 2013 18:07:42 +0000 (18:07 +0000)]
remove assignments that will be overwritten right afterwards,
and remove pointless local variables;
found in a clang output from Ulrich Spoerlein <uqs at FreeBSD>

11 years agoupdate the link to the ISC license
Ingo Schwarze [Tue, 31 Dec 2013 17:47:17 +0000 (17:47 +0000)]
update the link to the ISC license
and note that the pkgsrc port was updated to 1.12.3

11 years agoAdd missing description of .UR/.UE.
Ingo Schwarze [Tue, 31 Dec 2013 15:17:51 +0000 (15:17 +0000)]
Add missing description of .UR/.UE.
While here, also add .EX/.EE and .PD to the MACRO SYNTAX table.

11 years agorelease 1.12.3 VERSION_1_12_3
Ingo Schwarze [Tue, 31 Dec 2013 11:28:20 +0000 (11:28 +0000)]
release 1.12.3

11 years agoExperimental feature to let apropos(1) show different keys than .Nd.
Ingo Schwarze [Tue, 31 Dec 2013 03:41:14 +0000 (03:41 +0000)]
Experimental feature to let apropos(1) show different keys than .Nd.
This really takes us beyond what grep -R /usr/*/man/ can do
because now you can search for pages by *one* criterion and then
display the contents of *another* macro from those pages, like in
$ apropos -O Ox Fa~wchar
to get an impression how long wide character handling is available.

11 years agoSplit buildnames() out of mansearch(); the latter function is getting
Ingo Schwarze [Tue, 31 Dec 2013 02:42:29 +0000 (02:42 +0000)]
Split buildnames() out of mansearch(); the latter function is getting
too long and unwieldy, but will grow more code soon.  No functional change.

11 years agoOops, missed one:
Ingo Schwarze [Mon, 30 Dec 2013 18:44:06 +0000 (18:44 +0000)]
Oops, missed one:
Remove duplicate const specifier from a call to mandoc_escape().
Found by Thomas Klausner <wiz at NetBSD dot org> using clang.
No functional change.

11 years agoRemove duplicate const specifiers from the declaration of mandoc_escape().
Ingo Schwarze [Mon, 30 Dec 2013 18:30:32 +0000 (18:30 +0000)]
Remove duplicate const specifiers from the declaration of mandoc_escape().
Found by Thomas Klausner <wiz at NetBSD dot org> using clang.
No functional change.

11 years agoOops, that segfaulted after deleting an mlink from the list.
Ingo Schwarze [Fri, 27 Dec 2013 23:41:55 +0000 (23:41 +0000)]
Oops, that segfaulted after deleting an mlink from the list.
Fix the loop logic in mlinks_undupe().

11 years agoSplit mlinks_undupe() out of mpages_merge()
Ingo Schwarze [Fri, 27 Dec 2013 20:35:51 +0000 (20:35 +0000)]
Split mlinks_undupe() out of mpages_merge()
such that the check for source manuals of the same name
can be done for multiple mlinks pointing to the same preformatted mpage.

11 years agoChange the mansearch() interface to use the mlinks table in the database
Ingo Schwarze [Fri, 27 Dec 2013 18:51:25 +0000 (18:51 +0000)]
Change the mansearch() interface to use the mlinks table in the database
and return a list of names with sections, used by apropos(1) for display.
While here, improve uniformity of the interface by allocating the file
name dynamically, just like the names list and the description.

11 years agoSave the MLINK name into the database, too;
Ingo Schwarze [Fri, 27 Dec 2013 18:42:25 +0000 (18:42 +0000)]
Save the MLINK name into the database, too;
apropos(1) will need it to display its results.

11 years agoWrite more than one mlink per mpage to the database.
Ingo Schwarze [Fri, 27 Dec 2013 16:40:35 +0000 (16:40 +0000)]
Write more than one mlink per mpage to the database.
Not yet used by apropos(1).

11 years agoAllow saving more than one mlink per mpage in the mlinks ohash.
Ingo Schwarze [Fri, 27 Dec 2013 16:17:32 +0000 (16:17 +0000)]
Allow saving more than one mlink per mpage in the mlinks ohash.
We are still only using one of them for now.
Actually, we are now using a different one,
but the order the mlinks are found is random anyway.

11 years agoEnable the framework code to allow more than one mlink per mpage.
Ingo Schwarze [Fri, 27 Dec 2013 15:48:09 +0000 (15:48 +0000)]
Enable the framework code to allow more than one mlink per mpage.
Not used yet.

11 years agoClean up the interface of mlink_add().
Ingo Schwarze [Fri, 27 Dec 2013 15:39:03 +0000 (15:39 +0000)]
Clean up the interface of mlink_add().
Consistently use "fsec" and "fform" for info derived from the file name.
No functional change.

11 years agoAnother step on the way to clear naming, this time regarding mlinks:
Ingo Schwarze [Fri, 27 Dec 2013 14:29:28 +0000 (14:29 +0000)]
Another step on the way to clear naming, this time regarding mlinks:
* rename global ohash filenames to mlinks
* rename ofadd() to mlink_add()
* fold fileadd() and inoadd() into mlink_add()
* fold filecheck() into mpages_merge()
Still no functional change.

11 years agoSplit struct mlink out of struct mpage.
Ingo Schwarze [Fri, 27 Dec 2013 03:06:17 +0000 (03:06 +0000)]
Split struct mlink out of struct mpage.
Still a 1:1 relation, no functional change yet.

11 years agoAdd an additional mlinks table to the database, redundant for now,
Ingo Schwarze [Fri, 27 Dec 2013 01:16:54 +0000 (01:16 +0000)]
Add an additional mlinks table to the database, redundant for now,
both because it contains nothing but a subset of the data of the
existing mpages table and because the relationship of mpage and mlink
entries is still 1:1.  But all that will eventually change.

11 years agoDrop the mpages_list, use the existing mpages ohash for iteration.
Ingo Schwarze [Thu, 26 Dec 2013 23:35:59 +0000 (23:35 +0000)]
Drop the mpages_list, use the existing mpages ohash for iteration.
No functional change except that the order of database entries changes,
which doesn't matter anyway.

11 years agoThe name "id" is terrible for a struct.
Ingo Schwarze [Thu, 26 Dec 2013 22:30:41 +0000 (22:30 +0000)]
The name "id" is terrible for a struct.
Make this more searchable by calling it "inodev".
No functional change.

11 years agoTo better support MLINKS, we will have to split the "docs" database
Ingo Schwarze [Thu, 26 Dec 2013 22:12:46 +0000 (22:12 +0000)]
To better support MLINKS, we will have to split the "docs" database
table into two tables, on for actual files on disk, one for (often
multiple) directory entries pointing to them.  That implies splitting
struct of into two structs, to be called "mpage" and "mlink",
respectively.  As a preparation, globally rename "of" and "inos"
to "mpage".  No functional change.

11 years agoStop parsing man(7) input when we found all we were searching for,
Ingo Schwarze [Thu, 26 Dec 2013 19:02:04 +0000 (19:02 +0000)]
Stop parsing man(7) input when we found all we were searching for,
such that we don't trigger an assertion on a duplicate NAME section.

11 years agoRework the documentation of Spaces, using the Ossanna/Kernighan/Ritter
Ingo Schwarze [Thu, 26 Dec 2013 17:23:42 +0000 (17:23 +0000)]
Rework the documentation of Spaces, using the Ossanna/Kernighan/Ritter
Heirloom Nroff/Troff User's Manual at the authoritative reference.
Part of our text was outright wrong.

Also, refrain from advertising the paddable non-breaking space `\~'
in the DESCRIPTION, for three reasons:  For nroff mode, -Tascii, and
fixed width fonts in general, it makes no difference, so keep the
discussion simple.  Compared to `\ ', '\~' is of questionable portability.
And if you want to keep words together, it is also more usual that you
don't want padding to intervene either.

Finally, drop the `\c' escape sequence (interrupt text processing)
which is not a special character but an input processing instruction
akin to the \<newline> escape sequence.

11 years agomerge from VERSION_1_12
Ingo Schwarze [Thu, 26 Dec 2013 14:39:35 +0000 (14:39 +0000)]
merge from VERSION_1_12

11 years agoI have no idea how it happened that \B, \H, \h, \L, and \l got
Ingo Schwarze [Thu, 26 Dec 2013 02:55:28 +0000 (02:55 +0000)]
I have no idea how it happened that \B, \H, \h, \L, and \l got
mapped to ESCAPE_NUMBERED (which is for \N and only for \N), that
made no sense at all.  Properly remap them to ESCAPE_IGNORE.

While here, move \B and \w from the group taking number arguments
to the group taking string arguments; right now, that doesn't imply
any functional change, but if we ever go ahead and implement a
parser for roff(7) numerical expressions, it will suddenly start
to matter, and cause confusion.

11 years agoThe roff language really has two groups of basic building blocks:
Ingo Schwarze [Thu, 26 Dec 2013 02:43:18 +0000 (02:43 +0000)]
The roff language really has two groups of basic building blocks:
Requests and escape sequences.  Consequently, supplement the
REQUEST REFERENCE by an ESCAPE SEQUENCE REFERENCE, such that people
no longer need to guess or experiment what mandoc(1) implements,
what it parses and ignores, and what it doesn't handle at all.

11 years agoParse and ignore the roff(7) escape sequences \d (move half line down)
Ingo Schwarze [Wed, 25 Dec 2013 22:45:33 +0000 (22:45 +0000)]
Parse and ignore the roff(7) escape sequences \d (move half line down)
und \u (move half line up).  Found by bentley@ in some DocBook crap.

11 years agoImplement .Fo/.Fa/.Fc indentation and break handling for -Tman.
Ingo Schwarze [Wed, 25 Dec 2013 22:00:45 +0000 (22:00 +0000)]
Implement .Fo/.Fa/.Fc indentation and break handling for -Tman.

11 years agoOops, .Fa never breaks the output line in the middle of any of its
Ingo Schwarze [Wed, 25 Dec 2013 21:24:12 +0000 (21:24 +0000)]
Oops, .Fa never breaks the output line in the middle of any of its
arguments, not even outside SYNOPSIS mode.  Quite surprising as .Fn
does break the line in the middle of its arguments outside SYNOPSIS
mode, and only doesn't do that in SYNOPSIS mode.  Wonders of groff...

11 years agoGarbage collect two local variables each used only one single time.
Ingo Schwarze [Wed, 25 Dec 2013 15:12:45 +0000 (15:12 +0000)]
Garbage collect two local variables each used only one single time.

11 years agoIn the SYNOPSIS, implement hanging indentation for .Fo
Ingo Schwarze [Wed, 25 Dec 2013 14:40:34 +0000 (14:40 +0000)]
In the SYNOPSIS, implement hanging indentation for .Fo
and avoid output line breaks inside .Fa arguments.
This reduces groff-mandoc differences in OpenBSD base by more than 8%.
Patch from Franco Fichtner <franco at lastsummer dot de> (DragonFly).

11 years agoSupport .St -xsh4.2, the System Interfaces part of the original Single
Ingo Schwarze [Wed, 25 Dec 2013 14:09:32 +0000 (14:09 +0000)]
Support .St -xsh4.2, the System Interfaces part of the original Single
UNIX Specification.  As this one appears to be used in the wild and we
already have -xpg4.2 and even -xsh5, it makes sense to add this one.
Note that calling the original SUS XPG4.2 appears to be more common
than calling it SUSv1, so it's ok that we don't have .St -susv1.
From Sascha Wildner <saw at online dot de> (DragonFly) via Franco Fichtner.

11 years agos/[Nn]ull/NUL/ in comments where appropriate;
Ingo Schwarze [Wed, 25 Dec 2013 00:50:05 +0000 (00:50 +0000)]
s/[Nn]ull/NUL/ in comments where appropriate;
suggested by Thomas Klausner <wiz @ NetBSD dot org>.

11 years agoDo not break output lines in .Fn function arguments in SYNOPSIS mode.
Ingo Schwarze [Wed, 25 Dec 2013 00:39:31 +0000 (00:39 +0000)]
Do not break output lines in .Fn function arguments in SYNOPSIS mode.
Following an idea from Franco Fichtner, but implemented more cleanly.
This reduces groff-mandoc-differences in OpenBSD base by a fantastic 7.5%.

11 years agoDelete the unused flag TERMP_IGNDELIM
Ingo Schwarze [Tue, 24 Dec 2013 23:04:36 +0000 (23:04 +0000)]
Delete the unused flag TERMP_IGNDELIM
and the empty callback termp_igndelim_pre().
Sort the remaining termp flags.

11 years agoImplement SYNOPSIS .Fn indentation for -Tman.
Ingo Schwarze [Tue, 24 Dec 2013 22:08:50 +0000 (22:08 +0000)]
Implement SYNOPSIS .Fn indentation for -Tman.

11 years agoIt turns out SYNOPSIS mode does not imply .Bk in general,
Ingo Schwarze [Tue, 24 Dec 2013 20:45:27 +0000 (20:45 +0000)]
It turns out SYNOPSIS mode does not imply .Bk in general,
but only within .Nm blocks.  Simplify the code accordingly.

Triggered by research done by Franco Fichtner.

11 years agoWhen deciding whether two consecutive macros are on the same input line,
Ingo Schwarze [Tue, 24 Dec 2013 19:11:45 +0000 (19:11 +0000)]
When deciding whether two consecutive macros are on the same input line,
we have to compare the line where the first one *ends* (not where it begins)
to the line where the second one starts.
This fixes the bug that .Bk allowed output line breaks right after block
macros spanning more than one input line, even when the next macro follows
on the same line.

11 years agoImplement a long-standing desideratum,
Ingo Schwarze [Mon, 23 Dec 2013 02:20:09 +0000 (02:20 +0000)]
Implement a long-standing desideratum,
hanging indentation for .Fn in SYNOPSIS mode,
exploiting the new trailspace feature
by deliberately *NOT* using it.

11 years agoPolishing the worms in my favourite can, term_flushln().
Ingo Schwarze [Sun, 22 Dec 2013 23:34:13 +0000 (23:34 +0000)]
Polishing the worms in my favourite can, term_flushln().

The TERMP_TWOSPACE flag i introduced in August 2009 was idiosyncratic
and served only a very narrow purpose.  Replace it by a more intuitive
and more general termp attribute "trailspace", to be used together
with TERMP_NOBREAK, to request a minimum amount of whitespace at
the end of the current column.  Adapt all code to the new interface.

No functional change intended;
code reviews to confirm that are welcome *eg*.

11 years agoFix end-of-sentence spacing after the DragonFly text production macro.
Ingo Schwarze [Sun, 22 Dec 2013 14:06:36 +0000 (14:06 +0000)]
Fix end-of-sentence spacing after the DragonFly text production macro.
Patch from Franco Fichtner <franco at lastsummer dot de>.

11 years agoImplement end-of-sentence spacing at the end of man(7) macro lines.
Ingo Schwarze [Sun, 22 Dec 2013 13:25:17 +0000 (13:25 +0000)]
Implement end-of-sentence spacing at the end of man(7) macro lines.

Patch from Franco Fichtner <franco at lastsummer dot de> (DragonFly).

11 years agoDocument the alternative syntax \C'uXXXX' for Unicode characters.
Ingo Schwarze [Sun, 22 Dec 2013 13:18:27 +0000 (13:18 +0000)]
Document the alternative syntax \C'uXXXX' for Unicode characters.
Forgotten when committing mandoc.c rev. 1.70.

11 years agoIn quoted macro arguments, double quotes can be quoted by doubling them.
Ingo Schwarze [Sun, 15 Dec 2013 23:56:42 +0000 (23:56 +0000)]
In quoted macro arguments, double quotes can be quoted by doubling them.
For a long time, we handle this in roff(7) and man(7) macros.
Now add correct handling for the mdoc(7) case, too.

Closely based on a patch by Tsugutomo dot ENAMI at jp dot sony dot com,
see http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=48438
received via Thomas Klausner (wiz@), slightly tweaked by me.

11 years agobentley@ looked at sbcl(1) and found new tasks for us...
Ingo Schwarze [Sun, 15 Dec 2013 21:30:13 +0000 (21:30 +0000)]
bentley@ looked at sbcl(1) and found new tasks for us...

11 years agoThe "value" argument to the roff(7) .nr requests ends right before
Ingo Schwarze [Sun, 15 Dec 2013 21:23:52 +0000 (21:23 +0000)]
The "value" argument to the roff(7) .nr requests ends right before
the first non-digit character.  While here, implement and document
an optional sign, requesting increment or decrement, as documented
in the Ossanna/Kernighan/Ritter troff manual and supported by groff.

Reported by bentley@ on discuss@.

11 years agoMy audit of mandoc revealed one missing (unsigned char) cast
Ingo Schwarze [Thu, 21 Nov 2013 01:49:18 +0000 (01:49 +0000)]
My audit of mandoc revealed one missing (unsigned char) cast
in an isspace() argument containing arbitrary char data.
Thanks to deraadt@ for triggering the audit.

11 years agoIn the parser, when closing an explicit block that is not open,
Ingo Schwarze [Mon, 11 Nov 2013 00:37:55 +0000 (00:37 +0000)]
In the parser, when closing an explicit block that is not open,
close below-subsection implicit scopes that may still be open.
In the formatter, make sure indentation is reset when leaving a scope,
not only when entering the next one.

Improves the formatting of gpg(1); issue reported by jca on ports.

11 years agoIgnore blank lines right after .SH and .SS.
Ingo Schwarze [Sun, 10 Nov 2013 22:54:40 +0000 (22:54 +0000)]
Ignore blank lines right after .SH and .SS.
Improves the rendering of gpg(1); issue reported by jca on ports.

11 years agoSupport the alternative syntax \C'uXXXX' for Unicode characters.
Ingo Schwarze [Sun, 10 Nov 2013 21:34:04 +0000 (21:34 +0000)]
Support the alternative syntax \C'uXXXX' for Unicode characters.
It is already documented in the Heirloom troff manual,
and groff handles it as well.

Bug reported by Bjarni Ingi Gislason <bjarniig at rhi dot hi dot is>
on <bug-groff at gnu dot org>.  Well, admittedly, that bug was reported
against groff, but mandoc was even more broken than groff with respect
to this syntax...

11 years agoclarify that \[uXXXX] wants uppercase hex digits
Ingo Schwarze [Sun, 10 Nov 2013 14:32:57 +0000 (14:32 +0000)]
clarify that \[uXXXX] wants uppercase hex digits

11 years agomissing features: line length and italic correction
Ingo Schwarze [Sun, 10 Nov 2013 12:28:02 +0000 (12:28 +0000)]
missing features: line length and italic correction

11 years agoWhile answering a question asked by espie@, i noticed that .Fd is not
Ingo Schwarze [Sat, 2 Nov 2013 20:39:49 +0000 (20:39 +0000)]
While answering a question asked by espie@, i noticed that .Fd is not
completely obsolete, but still somewhat useful for listing preprocessor
directives, in particular in the SYNOPSIS.

11 years agoThe man(7) language has no syntax to specify architectures, but it
Ingo Schwarze [Sun, 27 Oct 2013 17:01:18 +0000 (17:01 +0000)]
The man(7) language has no syntax to specify architectures, but it
can still be used to write architecture-specific manuals, of course.

So just derive the architecture a man(7) manual belongs to from the
directory where it is located and refrain from warning about each and
every architecture-specific man(7) manual found.

While here, delete some trailing whitespace in the neighbourhood.

11 years agoThe code in ofmerge() only tried the source parsers if at least one
Ingo Schwarze [Sun, 27 Oct 2013 16:41:31 +0000 (16:41 +0000)]
The code in ofmerge() only tried the source parsers if at least one
of the path (/man1/ .. /man9/) or the file name suffix (*.1 .. *.9)
indicated a source manual.  That missed source manuals with unusual
names in unusual locations.

Instead, as the existing comment right above already suggests, try
the source parsers unless both the path and the file name suffix
unambiguously indicate a preformatted manual (/cat*/*.0).

This change is not expensive in practice because no real-world
system will have large numbers of preformatted pages outside
/cat*/*.0.  The only way to make information loss even less probable
would be to try the source parsers on all files, even /cat*/*.0,
which wouldn't buy us much because no real-world system will call
source manuals /cat*/*.0, but it will be expensive in practice,
because many real-world systems have large numbers of preformatted
pages called /cat*/*.0.

11 years agodelete duplicate NULL check and polish style;
Ingo Schwarze [Sun, 27 Oct 2013 16:09:44 +0000 (16:09 +0000)]
delete duplicate NULL check and polish style;
no functional change

11 years agoParse and ignore .hw (hyphenation points in words); this is safe because
Ingo Schwarze [Tue, 22 Oct 2013 20:38:00 +0000 (20:38 +0000)]
Parse and ignore .hw (hyphenation points in words); this is safe because
we don't do hyphenation anyway, so there is no point in throwing an ERROR
when encountering .hw.
Real-world usage of the request found by naddy@ in sysutils/dwdiff(1).

11 years agoThere are three kinds of input lines: text lines, macros taking
Ingo Schwarze [Mon, 21 Oct 2013 23:47:58 +0000 (23:47 +0000)]
There are three kinds of input lines: text lines, macros taking
positional arguments (like Dt Fn Xr) and macros taking text as
arguments (like Nd Sh Em %T An).  In the past, even the latter put
each word of their arguments into its own MDOC_TEXT node; instead,
concatenate arguments unless delimiters, keeps or spacing mode
prevent that.  Regarding mandoc(1), this is internal refactoring,
no output change intended.

Regarding mandocdb(8), this fixes yet another regression introduced
when switching from DB to SQLite: The ability to search for strings
crossing word boundaries was lost and is hereby restored.  At the
same time, database sizes and build times are both reduced by a bit
more than 5% each.

11 years agoFix another regression introduced when switching from DB to SQLite:
Ingo Schwarze [Sun, 20 Oct 2013 00:03:05 +0000 (00:03 +0000)]
Fix another regression introduced when switching from DB to SQLite:
The ~ operator has to do regular expression search, not globbing.

11 years agoFix a regression introduced when switching from DB to SQLite:
Ingo Schwarze [Sat, 19 Oct 2013 20:43:13 +0000 (20:43 +0000)]
Fix a regression introduced when switching from DB to SQLite:
The = operator has to do substring search, not word search.

11 years agoFix an assertion in dbindex(): Null strings are never entered into the
Ingo Schwarze [Fri, 18 Oct 2013 23:07:23 +0000 (23:07 +0000)]
Fix an assertion in dbindex():  Null strings are never entered into the
string table.  Fortunately, they never need UTF-8 translation either.

11 years agoManuals to be checked with "mandocdb -t" need not be in the current
Ingo Schwarze [Fri, 18 Oct 2013 21:10:07 +0000 (21:10 +0000)]
Manuals to be checked with "mandocdb -t" need not be in the current
directory or one of its subdirectories.

11 years agoImplement the .UR/.UE block (uniform resource identifier) introduced in the
Ingo Schwarze [Thu, 17 Oct 2013 20:54:58 +0000 (20:54 +0000)]
Implement the .UR/.UE block (uniform resource identifier) introduced in the
man-ext macros by Eric S. Raymond, enabled by default in groff_man(7).
Usual disclaimer: You don't write new man(7) code, so you are not going
to use these, either.
Improves e.g. the bzr(1) and etherape(1) manuals.
Thanks to naddy@ for bringing these to my attention.

11 years agoParse and ignore the .fam (font family) request.
Ingo Schwarze [Mon, 14 Oct 2013 01:43:14 +0000 (01:43 +0000)]
Parse and ignore the .fam (font family) request.
Fixes irunner(1) in devel/ipython and uim-xim(1) in inputmethods/uim.
Thanks to naddy@ for bringing these to my attention.

11 years agomerge from VERSION_1_12: new section about mandoc history, with links
Ingo Schwarze [Sun, 13 Oct 2013 18:34:51 +0000 (18:34 +0000)]
merge from VERSION_1_12: new section about mandoc history, with links

11 years agomention the three unreleased versions since 1.10.3
Ingo Schwarze [Sun, 13 Oct 2013 16:06:50 +0000 (16:06 +0000)]
mention the three unreleased versions since 1.10.3

11 years agoadd libppath; Thomas Klausner, NetBSD rev. 1.4, Aug 29, 2011
Ingo Schwarze [Sun, 13 Oct 2013 15:24:03 +0000 (15:24 +0000)]
add libppath; Thomas Klausner, NetBSD rev. 1.4, Aug 29, 2011

11 years agoadd libefi and simplify some names
Ingo Schwarze [Sun, 13 Oct 2013 14:45:56 +0000 (14:45 +0000)]
add libefi and simplify some names
from FreeBSD ports SVN rev. 293734, Ulrich Spoerlein March 24, 2012
in case of conflicts with NetBSD, i keep the simpler NetBSD names

11 years agosync SUSv2/SUSv3 entries with groff
Ingo Schwarze [Sun, 13 Oct 2013 03:07:34 +0000 (03:07 +0000)]
sync SUSv2/SUSv3 entries with groff
reduces groff-mandoc-differences for several pthread_*(3) manuals
noticed by Franco Fichtner <franco at lastsummer dot de>
dragonfly.git/commitdiff/370c546b87777b40b5fc862491555ef71b4ee130