]> git.cameronkatri.com Git - mandoc.git/log
mandoc.git
6 years agoDo not draw horizontal lines through vertical spans
Ingo Schwarze [Thu, 29 Nov 2018 23:08:13 +0000 (23:08 +0000)]
Do not draw horizontal lines through vertical spans
which are requested in the data section rather than in the layout.
Mini-feature found in misc/pfm(1).

6 years agoNow that it is better understood how borders work,
Ingo Schwarze [Thu, 29 Nov 2018 21:40:53 +0000 (21:40 +0000)]
Now that it is better understood how borders work,
rewrite tbl_hrule() in a simpler way.
Fix several bugs in the process.

No more special flags, just use the existing TBL_OPT_* from mandoc.h.
Reduce the number of tracked rows from three to two, which is more logical:
one above the line and one below is sufficient to figure out crossings.
No more magic quirks, all conditions are readily comprehensible now.
Add comments.

6 years agoBetter handle automatic column width assignments in the presence of
Ingo Schwarze [Thu, 29 Nov 2018 01:55:02 +0000 (01:55 +0000)]
Better handle automatic column width assignments in the presence of
horizontal spans, by implementing a moderately difficult iterative
algoritm.  The benefit is that spans containing long text no longer
cause an excessive width of their starting column.

The result is likely not optimal, in particular in the presence
of many spans overlapping in complicated ways nor when spans
interact with equalizing or maximizing colums.  But i doubt the
practical usefulness of making this more complicated.

Issue originally reported in synaptics(4), which now looks better,
by tedu@ three years ago, and reminded by Pali Rohar this summer.

6 years agoBugfix: never set termp->enc to the ambiguous value TERMENC_LOCALE,
Ingo Schwarze [Wed, 28 Nov 2018 14:23:06 +0000 (14:23 +0000)]
Bugfix: never set termp->enc to the ambiguous value TERMENC_LOCALE,
but instead set it to TERMENC_UTF8 or TERMENC_ASCII.
Makes tbl(7) box drawing work under -T locale (that is, by default
when LC_CTYPE is defined appropriately).

6 years agoadditional check needed after the previous (box drawing) patch
Ingo Schwarze [Wed, 28 Nov 2018 13:43:54 +0000 (13:43 +0000)]
additional check needed after the previous (box drawing) patch

6 years agoIn -T utf8 output mode, render tbl(7) borders with the Unicode
Ingo Schwarze [Wed, 28 Nov 2018 04:47:51 +0000 (04:47 +0000)]
In -T utf8 output mode, render tbl(7) borders with the Unicode
box drawing characters, U+2500 to U+257F.

Originally suggested by bentley@ four years ago,
reminded this summer by Pali Rohar.

Binary and decimal arithmetics are boring,
so let's use some ternary arithmetics for a change.

That said, some other aspects are too complicated for my liking,
so this could use some polishing in the future.

6 years agoImplement tbl(7) lines in -T html output,
Ingo Schwarze [Mon, 26 Nov 2018 21:06:02 +0000 (21:06 +0000)]
Implement tbl(7) lines in -T html output,
as far as they are on the edges of table cells
rather than going through the middle of cells:

* the box, doublebox, and allbox options;
* the | and || layout modifiers;
* and the _ and = data lines;
- but not yet _ and = in individual layout and data cells.

Missing feature reported by Pali dot Rohar at gmail dot com.

6 years agoWhen a conditional block is closed by putting "\}" on a text line
Ingo Schwarze [Mon, 26 Nov 2018 17:44:34 +0000 (17:44 +0000)]
When a conditional block is closed by putting "\}" on a text line
by itself (which is somewhat unusual but not invalid; most authors
use the empty macro line ".\}" instead), agree more closely with
groff and do not produce a double space in the output.

Quirk reported by millert@.

While here, tweak the rest of the function body of roff_cond_text()
to more closely match roff_cond_sub().  The subtly different handling
could make people (including myself) wonder whether there is any
point in being different.  Testing shows there is not.

6 years agoMark Harris pointed out that people might have doubts whether all files
Ingo Schwarze [Mon, 26 Nov 2018 17:11:11 +0000 (17:11 +0000)]
Mark Harris pointed out that people might have doubts whether all files
contained in the mandoc toolkit are "code and documentation", and whether
this is of any consequence for licensing, so clarify.

6 years agoPlace mandoc.css into the public domain.
Ingo Schwarze [Mon, 26 Nov 2018 15:02:38 +0000 (15:02 +0000)]
Place mandoc.css into the public domain.

The reason for doing this rather than using the ISC license
is that i guess that in some contexts, a requirement to preserve
a Copyright and license header might be inconvenient, and i really
don't care at all how people use it.

What matters is that they do use it, or something similar - attempts
to use mandoc without any CSS are a constant source of grief and
bogus bug reports because HTML without CSS doesn't look very good:
the more structural and semantic and the less presentational and
old-fashioned the HTML, the more so.

Thanks to Mark Harris <mark dot hsj at gmail dot com> for pointing out
that the permissions on this particular file were unclear.

6 years agoSimplify writing of tbl(7) cells by using the new feature of passing
Ingo Schwarze [Mon, 26 Nov 2018 01:51:46 +0000 (01:51 +0000)]
Simplify writing of tbl(7) cells by using the new feature of passing
a NULL pointer for the value of a style attribute, in which case
the attribute is omitted from the HTML element.
Minus 12 lines of ugly and repetitive code, no functional change.

6 years agoSupport more than one style attribute one the same HTML element.
Ingo Schwarze [Mon, 26 Nov 2018 01:38:23 +0000 (01:38 +0000)]
Support more than one style attribute one the same HTML element.
In fact, this is already required when a table uses non-default
horizontal and vertical alignment in the same cell.

6 years agoLet cells containing nothing but \^ extend the cell above.
Ingo Schwarze [Sun, 25 Nov 2018 21:17:34 +0000 (21:17 +0000)]
Let cells containing nothing but \^ extend the cell above.
Missing feature reported by Pali dot Rohar at gmail dot com.

6 years agoIn tbl(7) -T html output,
Ingo Schwarze [Sun, 25 Nov 2018 19:24:20 +0000 (19:24 +0000)]
In tbl(7) -T html output,
span cells horizontally and vertically as requested by the layout.
Does not handle spans requested in the data section yet.

To be able to do this, record the number of rows spanned
in the first data cell (struct tbl_dat) of a vertical span.

Missing feature reported by Pali dot Rohar at gmail dot com.

6 years agoHTML formatting of .IP
Ingo Schwarze [Sun, 25 Nov 2018 18:04:58 +0000 (18:04 +0000)]
HTML formatting of .IP

6 years agoImplement horizontal and vertical alignment of tbl(7) cell content
Ingo Schwarze [Sat, 24 Nov 2018 23:03:18 +0000 (23:03 +0000)]
Implement horizontal and vertical alignment of tbl(7) cell content
in -T html output.  This does not handle spanned cells yet.
Missing feature reported by Pali dot Rohar at gmail dot com.

6 years agoWhen a font escape appears in the middle of a string,
Ingo Schwarze [Fri, 23 Nov 2018 19:17:05 +0000 (19:17 +0000)]
When a font escape appears in the middle of a string,
make sure it doesn't cause output of bogus whitespace.
Fixing a bug reported by Pali dot Rohar at gmail dot com.

6 years agoCorrect and shorten the description of the sort order of apropos(1)
Ingo Schwarze [Thu, 22 Nov 2018 12:33:52 +0000 (12:33 +0000)]
Correct and shorten the description of the sort order of apropos(1)
results.  As a matter of fact, which manpath the page comes from
does not matter in that context.  That only matters for the priority
of pages in man(1) mode (without -a, -f, and -k).

Noticed while working on a patch from Yuri Pankov <yuripv at FreeBSD>.

6 years agoIn apropos(1) output, stop sorting .Nm search results by name
Ingo Schwarze [Thu, 22 Nov 2018 12:01:46 +0000 (12:01 +0000)]
In apropos(1) output, stop sorting .Nm search results by name
priorities (bits).  The obscure feature wasn't documented and merely
confused people - for example Edward Tomasz Napierala <trasz at
FreeBSD>, see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=227408.

Smaller patch provided by Yuri Pankov <yuripv at FreeBSD>, but i'm
also retiring the now unused "bits" member from struct manpage.
Simplification is good.

6 years agoIn -T locale (the default), -T ascii, and -T utf8 mode, provide a new
Ingo Schwarze [Thu, 22 Nov 2018 11:30:23 +0000 (11:30 +0000)]
In -T locale (the default), -T ascii, and -T utf8 mode, provide a new
output option -O tag[=term] to move right to the definition of "term" when
opening the manual page in a pager, effectively porting the -T html
fragment name feature - https://man.openbsd.org/ksh#ulimit - to the
terminal.  Try:

$ man -O tag uvm_sysctl
$ man -O tag=ulimit ksh
$ man -O tag 3 compress

Feature development triggered by a question from kn@.  Klemens also
tested, provided feedback that resulted in improvements, and provided
an OK.

6 years agoImprove POSIX compliance by making case-insensitive extended
Ingo Schwarze [Mon, 19 Nov 2018 19:27:37 +0000 (19:27 +0000)]
Improve POSIX compliance by making case-insensitive extended
regular expressions the default in man(1) -k searches, also matching
what the man-db package used by many Linux distributions does.

Originally requested by Wolfram Schneider <wosch at FreeBSD>
via Yuri Pankov <yuripv at FreeBSD>.

Feedback and OK cheloha@, and no objections when shown on tech@.

Thanks to cheloha@ for pointing out that POSIX requires this behaviour
and for the suggestion to explicitly say that *extended* regular
expressions are used here.

While here, unify spelling of case-[in]sensitive, fix a typo,
update the EXAMPLES, and add a STANDARDS section.

6 years agoCorrectly construct empty lists in dbm_page_get().
Ingo Schwarze [Mon, 19 Nov 2018 19:22:07 +0000 (19:22 +0000)]
Correctly construct empty lists in dbm_page_get().

Original commit message by the author of this bugfix patch, bluhm@:

lstmatch() expects a list of strings separated by \0 and terminated
with \0\0.  In the NULL case dbm_page_get() returned only simple
strings so correct processing was depending on data layout.  Use
an additional \0 to terminate the single string lists.  Found by
mandoc regress since llvm linker on amd64 arranges strings differently.

6 years agoin -man -Thtml, vertical spacing is required before .IP
Ingo Schwarze [Thu, 25 Oct 2018 21:23:52 +0000 (21:23 +0000)]
in -man -Thtml, vertical spacing is required before .IP

6 years agoImplement the \f(CW and \f(CR (constant width font) escape sequences
Ingo Schwarze [Thu, 25 Oct 2018 01:32:40 +0000 (01:32 +0000)]
Implement the \f(CW and \f(CR (constant width font) escape sequences
for HTML output.  Somewhat relevant because pod2man(1) relies on this.
Missing feature reported by Pali dot Rohar at gmail dot com.

Note that constant width font was already correctly selected before
this when required by semantic markup.  Only attempting physical
markup with the low-level escape sequence was ineffective.

6 years agoThe ctags(1) file format uses whitespace as a field delimiter, and
Ingo Schwarze [Tue, 23 Oct 2018 20:42:37 +0000 (20:42 +0000)]
The ctags(1) file format uses whitespace as a field delimiter, and
there is no escaping mechanism, so tags cannot contain whitespace.
Consequently, we used to simply not tag macro arguments containing
space characters.  Instead, let's tag the first word, unless there
is a proper match for that word somewhere else.  For example, this
makes ":tquery" work in ntpd.conf(5).

Feature suggested by kn@, who also thinks the implementation looks
reasonable and works in his testing.

6 years agoInput lines that are not blank but generate no output,
Ingo Schwarze [Tue, 23 Oct 2018 17:18:01 +0000 (17:18 +0000)]
Input lines that are not blank but generate no output,
for example lines containing nothing but "\&", are significant
in no-fill mode and can be represented by blank lines inside <pre>.
Fixing a bug that Pali dot Rohar at gmail dot com found
in pod2man(1) output, for example Email::Address::XS(3p).

While here, inside no-fill mode, there is no need to encode
totally blank input lines by emulating .PP - just let them
through as we are inside <pre> anyway.

6 years agoRewrite parse_path_info() to be four lines shorter, simplify ownership
Ingo Schwarze [Fri, 19 Oct 2018 21:10:56 +0000 (21:10 +0000)]
Rewrite parse_path_info() to be four lines shorter, simplify ownership
of allocated strings, do not write to the input string, and improve
diagnostic output.

The confusing error message "invalid arch" as a reaction to mistyping
the release name was noticed by tb@, who likes the new code and message.

6 years agoupdate DESCRIPTION and COMPATIBILITY, mostly correcting statements
Ingo Schwarze [Thu, 4 Oct 2018 15:32:09 +0000 (15:32 +0000)]
update DESCRIPTION and COMPATIBILITY, mostly correcting statements
from the past that are no longer true

6 years agoStop abusing subsections to represent the list of escape sequences;
Ingo Schwarze [Thu, 4 Oct 2018 15:16:23 +0000 (15:16 +0000)]
Stop abusing subsections to represent the list of escape sequences;
instead, use .Bl -tag like everywhere else.  The same was already
done for requests quite some time ago.  Also, consistently mark up
escape sequences with .Ic, just like requests.

6 years agoWhen a subsection header contains no letters but only special
Ingo Schwarze [Thu, 4 Oct 2018 13:23:04 +0000 (13:23 +0000)]
When a subsection header contains no letters but only special
characters, skip the TOC entry.  Issue reported by kristaps@.

6 years agoadd DESCRIPTION and .Ss to the toc; suggested by espie@
Ingo Schwarze [Tue, 2 Oct 2018 19:44:15 +0000 (19:44 +0000)]
add DESCRIPTION and .Ss to the toc; suggested by espie@

6 years agoenable the equivalent of -O toc in man.cgi(8)
Ingo Schwarze [Tue, 2 Oct 2018 19:41:23 +0000 (19:41 +0000)]
enable the equivalent of -O toc in man.cgi(8)

6 years agoAdd an option -T html -O toc to add a brief table of contents near
Ingo Schwarze [Tue, 2 Oct 2018 14:56:47 +0000 (14:56 +0000)]
Add an option -T html -O toc to add a brief table of contents near
the top of HTML pages containing at least two non-standard sections.
Suggested by Adam Kalisz and discussed with kristaps@ during EuroBSDCon 2018.

6 years agoSupport a second argument to -O man,
Ingo Schwarze [Tue, 2 Oct 2018 12:33:36 +0000 (12:33 +0000)]
Support a second argument to -O man,
selecting the format according to local existence of the file.
Suggested by kristaps@ during EuroBSDCon 2018.
Written on the train Frankfurt-Karlsruhe returning from EuroBSDCon.

6 years agoRender the eqn(7) "sqrt" function as U+221A in UTF-8 output.
Ingo Schwarze [Tue, 2 Oct 2018 12:18:33 +0000 (12:18 +0000)]
Render the eqn(7) "sqrt" function as U+221A in UTF-8 output.
This also agrees with what groff does.
Suggested by an attendee of EuroBSDCon 2018 in Bucuresti.
Written on the plane Bucuresti-Frankfurt returning from EuroBSDCon.

6 years agoAdd missing URI encoding when writing HTTP redirects,
Ingo Schwarze [Mon, 1 Oct 2018 08:06:53 +0000 (08:06 +0000)]
Add missing URI encoding when writing HTTP redirects,
fixing a bug reported by <jungleboogie0 at gmail dot com> on bugs@.
While here, fully validate the arch name
such that we do not have to URI encode that one.

6 years agofeature suggestions from EuroBSDCon 2018
Ingo Schwarze [Sun, 23 Sep 2018 05:34:58 +0000 (05:34 +0000)]
feature suggestions from EuroBSDCon 2018

6 years agoReduce excessive right padding in tagged list heads.
Ingo Schwarze [Mon, 27 Aug 2018 23:13:44 +0000 (23:13 +0000)]
Reduce excessive right padding in tagged list heads.
The 1.2em was an approximate equivalent of the 2n traditionally used
for terminal display, but it is much too wide for HTML rendering.
Issue reported by mikeb@.

6 years agoSupport nesting of elements with next-line scope.
Ingo Schwarze [Sun, 26 Aug 2018 16:21:23 +0000 (16:21 +0000)]
Support nesting of elements with next-line scope.
For example, ksh93(1) needs this for .B\n.SM.

6 years agoRudimentary implementation of the roff(7) .char (output glyph
Ingo Schwarze [Sat, 25 Aug 2018 16:53:38 +0000 (16:53 +0000)]
Rudimentary implementation of the roff(7) .char (output glyph
definition) request, used for example by groff_hdtbl(7).

This simplistic implementation may interact incorrectly
with the .tr (input character translation) request.
But come on, you are not only using .char *and* .tr, but you do so
with respect to the same character in the same manual page?

6 years agoIf man(7) next-line scope is open and the line ends with \c,
Ingo Schwarze [Sat, 25 Aug 2018 12:33:03 +0000 (12:33 +0000)]
If man(7) next-line scope is open and the line ends with \c,
the scope remains open.  Needed for example for groff_man(7).

6 years agoRudimentary implementation of the roff(7) .while request.
Ingo Schwarze [Fri, 24 Aug 2018 23:12:33 +0000 (23:12 +0000)]
Rudimentary implementation of the roff(7) .while request.
Needed for example by groff_hdtbl(7).

There are two limitations:
It does not support nested .while requests yet,
and each .while loop must start and end in the same scope.

The roff_parseln() return codes are now more flexible
and allow OR'ing options.

6 years agoThe upcoming .while request will have to re-execute roff(7) lines
Ingo Schwarze [Thu, 23 Aug 2018 19:33:27 +0000 (19:33 +0000)]
The upcoming .while request will have to re-execute roff(7) lines
parsed earlier, so they will have to be saved for reuse - but the
read.c preparser does not know yet whether a line contains a .while
request before passing it to the roff parser.  To cope with that,
save all parsed lines for now.  Even shortens the code by 20 lines.

6 years agoImplement the roff(7) .shift and .return requests,
Ingo Schwarze [Thu, 23 Aug 2018 14:29:38 +0000 (14:29 +0000)]
Implement the roff(7) .shift and .return requests,
for example used by groff_hdtbl(7) and groff_mom(7).

Also correctly interpolate arguments during nested macro execution
even after .shift and .return, implemented using a stack of argument
arrays.

Note that only read.c, but not roff.c can detect the end of a macro
execution, and the existence of .shift implies that arguments cannot
be interpolated up front, so unfortunately, this includes a partial
revert of roff.c rev. 1.337, moving argument interpolation back into
the function roff_res().

6 years agoImplement the \\$@ escape sequence (insert all macro arguments,
Ingo Schwarze [Tue, 21 Aug 2018 18:15:22 +0000 (18:15 +0000)]
Implement the \\$@ escape sequence (insert all macro arguments,
quoted) in addition to the already supported \\$* (similar, but
unquoted).  Then use \\$@ to improve the implementation of
the .als request (macro alias).

Needed by groff_hdtbl(7).
Gosh, it feels like the manual pages of the groff package are
exercising every bloody roff(7) feature under the sun.  In the
manual page source code itself, not merely in the implementation
of the used macro packages, that is.

6 years agoImprove the ASCII rendering of \(Po (Pound Sterling)
Ingo Schwarze [Tue, 21 Aug 2018 16:06:48 +0000 (16:06 +0000)]
Improve the ASCII rendering of \(Po (Pound Sterling)
and of the playing card suits to match groff, using feedback
from Ralph Corderoy <ralph at inputplus dot co dot uk>.

6 years agoFix some issues found looking at groff_char(7):
Ingo Schwarze [Tue, 21 Aug 2018 01:59:22 +0000 (01:59 +0000)]
Fix some issues found looking at groff_char(7):
* Add two missing characters, \('Y and \('y.
* The Weierstrass p is not capital, see http://unicode.org/notes/tn27/.
* Add a groff-compatible ASCII transliteration for U+02DC: "~".

6 years ago\f[] means \fP, not \fR
Ingo Schwarze [Mon, 20 Aug 2018 18:06:56 +0000 (18:06 +0000)]
\f[] means \fP, not \fR

6 years agoExpand \n(.$ (the number of macro arguments) right in roff_userdef(),
Ingo Schwarze [Mon, 20 Aug 2018 17:25:09 +0000 (17:25 +0000)]
Expand \n(.$ (the number of macro arguments) right in roff_userdef(),
before even reparsing the expanded macro.
That is the least dirty way to fix the bug that \(.$ remained set
after execution of the user-defined macro ended.  Any other way
to fix it would probably require changes to read.c, which really
shouldn't be bothered with such roff(7) internals.

6 years agoDisable one test for now that is broken after the addition of \).
Ingo Schwarze [Sun, 19 Aug 2018 23:58:09 +0000 (23:58 +0000)]
Disable one test for now that is broken after the addition of \).
It is not broken because of \), which is correctly implemented, but
the addition merely reveals a hidden bug elsewhere, almost certainly
in \\ handling.  Given that \\ is among the most mysterious escape
sequences and using it is very strongly discouraged in manual pages,
fixing that is not urgent - and may be hard.

6 years agoAdd the \) special character, a variant of \& so arcane that i
Ingo Schwarze [Sun, 19 Aug 2018 23:48:36 +0000 (23:48 +0000)]
Add the \) special character, a variant of \& so arcane that i
intentionally leave it undocumented.  Abused for example in the
groff(7) manual page.

6 years agoDo alignment of non-numeric strings in numeric cells the same way
Ingo Schwarze [Sun, 19 Aug 2018 23:10:28 +0000 (23:10 +0000)]
Do alignment of non-numeric strings in numeric cells the same way
as groff, and also honour the explicit alignment indicator "\&".
This required an almost complete rewrite of both the measurement
function and the formatter function for numeric cells.

6 years agodo not print horizontal lines inside vertical spans
Ingo Schwarze [Sun, 19 Aug 2018 19:32:21 +0000 (19:32 +0000)]
do not print horizontal lines inside vertical spans

6 years agoMostly complete implementation of the 'c' (character available)
Ingo Schwarze [Sun, 19 Aug 2018 17:46:14 +0000 (17:46 +0000)]
Mostly complete implementation of the 'c' (character available)
roff conditional, except that the .char request still isn't supported
and that behaviour differs from groff in many edge cases.
But at least valid character names and numbers are now distinguished
from invalid ones.
This also fixes the bug that parsing of the 'c' conditional was
incomplete, which resulted in leaking the tested character to the
input parser at the beginning of the body when the condition was
inverted.

6 years agoBugfix: When a line ends with '\ \"', don't strip the trailing space
Ingo Schwarze [Sat, 18 Aug 2018 22:05:43 +0000 (22:05 +0000)]
Bugfix: When a line ends with '\ \"', don't strip the trailing space
because that turned it into a bogus line continuation.

6 years agosupport the highly surprising escape sequence \# (line continuation
Ingo Schwarze [Sat, 18 Aug 2018 21:37:01 +0000 (21:37 +0000)]
support the highly surprising escape sequence \# (line continuation
with comment); used for example by gropdf(1)

6 years agoparagraphs can contain .MT and .UR blocks
Ingo Schwarze [Sat, 18 Aug 2018 20:41:54 +0000 (20:41 +0000)]
paragraphs can contain .MT and .UR blocks

6 years agoIf a tbl(7) column contains both text cells and numeric cells,
Ingo Schwarze [Sat, 18 Aug 2018 20:18:14 +0000 (20:18 +0000)]
If a tbl(7) column contains both text cells and numeric cells,
horizontally align the numbers in the same way as groff does.

6 years ago.RE causes a line break even if .RS is not open
Ingo Schwarze [Sat, 18 Aug 2018 17:32:37 +0000 (17:32 +0000)]
.RE causes a line break even if .RS is not open

6 years ago.SY causes a one-column indentation even without any argument
Ingo Schwarze [Sat, 18 Aug 2018 17:07:23 +0000 (17:07 +0000)]
.SY causes a one-column indentation even without any argument

6 years agoDo not allocate a column for decimal points if all numbers are integers.
Ingo Schwarze [Sat, 18 Aug 2018 16:44:55 +0000 (16:44 +0000)]
Do not allocate a column for decimal points if all numbers are integers.

6 years agoUnsurprisingly, zero-width non-breaking spaces have... width 0.
Ingo Schwarze [Sat, 18 Aug 2018 15:17:03 +0000 (15:17 +0000)]
Unsurprisingly, zero-width non-breaking spaces have...  width 0.

6 years agoend of sentence detection after .ME and .UE, useful for some GNU manuals
Ingo Schwarze [Sat, 18 Aug 2018 15:13:32 +0000 (15:13 +0000)]
end of sentence detection after .ME and .UE, useful for some GNU manuals

6 years agoThe .nf/.fi (fill mode) requests never have text children
Ingo Schwarze [Sat, 18 Aug 2018 14:26:12 +0000 (14:26 +0000)]
The .nf/.fi (fill mode) requests never have text children
and in particular do not reset font mode.

6 years agoTwo consecutive .SY blocks only get a blank line in between
Ingo Schwarze [Sat, 18 Aug 2018 14:02:56 +0000 (14:02 +0000)]
Two consecutive .SY blocks only get a blank line in between
if the first one is explicitly closed with .YS.

6 years agoprevent line breaks in the middle of .OP
Ingo Schwarze [Sat, 18 Aug 2018 13:05:10 +0000 (13:05 +0000)]
prevent line breaks in the middle of .OP

6 years agoMassively reduce the amount of text, cutting it down to what is needed
Ingo Schwarze [Sat, 18 Aug 2018 04:32:10 +0000 (04:32 +0000)]
Massively reduce the amount of text, cutting it down to what is needed
to understand existing man(7) code and deleting parts that would only
be useful for writing new documents, which we strongly discourage:

* Delete the MANUAL STRUCTURE section which merely duplicates mdoc(7).
* Delete internal cross references only useful for writing new code.
* Delete many instances of "included only for compatibility" as the
  whole language is only provided for compatibility.
* Fix a few minor errors and omissions.

6 years agoimplement the GNU man-ext .SY/.YS (synopsis block) macro in man(7),
Ingo Schwarze [Sat, 18 Aug 2018 02:08:27 +0000 (02:08 +0000)]
implement the GNU man-ext .SY/.YS (synopsis block) macro in man(7),
used in most manual pages of the groff package

6 years agoRemove more pointer arithmetic passing via regions outside the array
Ingo Schwarze [Fri, 17 Aug 2018 20:33:37 +0000 (20:33 +0000)]
Remove more pointer arithmetic passing via regions outside the array
that is undefined according to the C standard.  Robert Elz <kre at
munnari dot oz dot au> pointed out i wasn't quite done yet.

6 years agoimplement the GNU man-ext .TQ macro in man(7),
Ingo Schwarze [Thu, 16 Aug 2018 23:43:37 +0000 (23:43 +0000)]
implement the GNU man-ext .TQ macro in man(7),
used for example by groff_diff(7)

6 years agoDo not calculate a pointer to a memory location before the beginning of
Ingo Schwarze [Thu, 16 Aug 2018 15:05:34 +0000 (15:05 +0000)]
Do not calculate a pointer to a memory location before the beginning of
a static array.  Christos Zoulas, Robert Elz, and Andreas Gustafsson
point out that is undefined behaviour by the C standard even if we
never access the pointer.

6 years agoDocument \*(.T.
Ingo Schwarze [Thu, 16 Aug 2018 14:07:11 +0000 (14:07 +0000)]
Document \*(.T.
While here, delete the section about predefined strings.
For manual pages, the concept is not important enough to be discussed
in such a prominent place, and some aspects of the text were also
misleading.  Add a shorter version of the relevant parts to the
description of the \* escape sequence instead.

6 years agoImplement the \*(.T predefined string (interpolate device name)
Ingo Schwarze [Thu, 16 Aug 2018 13:54:06 +0000 (13:54 +0000)]
Implement the \*(.T predefined string (interpolate device name)
by allowing the preprocessor to pass it through to the formatters.
Used for example by the groff_char(7) manual page.

6 years agoprocess UTF-8 input even in ASCII output mode,
Ingo Schwarze [Thu, 16 Aug 2018 12:25:32 +0000 (12:25 +0000)]
process UTF-8 input even in ASCII output mode,
and provide a way to specify additional diff(1) options

6 years agofix incomplete variable renaming in previous;
Ingo Schwarze [Wed, 15 Aug 2018 15:37:25 +0000 (15:37 +0000)]
fix incomplete variable renaming in previous;
found by Thomas Klausner <wiz at NetBSD> via a compiler warning

6 years agoChange comment: NetBSD just fixed their headers; but leave the
Ingo Schwarze [Wed, 15 Aug 2018 14:37:41 +0000 (14:37 +0000)]
Change comment: NetBSD just fixed their headers; but leave the
workaround in place for now for the benefit of older systems,
and other systems might contain similar problems.

6 years agoNULL requires <stddef.h>
Ingo Schwarze [Wed, 15 Aug 2018 02:48:51 +0000 (02:48 +0000)]
NULL requires <stddef.h>

6 years agoAutodetect whether _GNU_SOURCE or _OPENBSD_SOURCE are needed; the
Ingo Schwarze [Wed, 15 Aug 2018 02:15:52 +0000 (02:15 +0000)]
Autodetect whether _GNU_SOURCE or _OPENBSD_SOURCE are needed; the
latter is a NetBSD idiosyncrasy reported by wiz@.  Also take into
account that NetBSD declares getsubopt(3) in the wrong header.

6 years agosupport tail arguments on the .ME and .UE macros,
Ingo Schwarze [Tue, 14 Aug 2018 01:27:48 +0000 (01:27 +0000)]
support tail arguments on the .ME and .UE macros,
used for example in the ditroff(7) manual of the groff package

6 years agoerror message for invalid -S argument
Ingo Schwarze [Fri, 10 Aug 2018 22:43:20 +0000 (22:43 +0000)]
error message for invalid -S argument

6 years agohandle the non-portable GNU-style \[charNN], \[charNNN] character
Ingo Schwarze [Fri, 10 Aug 2018 22:12:44 +0000 (22:12 +0000)]
handle the non-portable GNU-style \[charNN], \[charNNN] character
escape sequences, used for example in the groff_char(7) manual page

6 years agoThe groff man-ext macros define fonts CB, CI, and CR,
Ingo Schwarze [Fri, 10 Aug 2018 20:40:45 +0000 (20:40 +0000)]
The groff man-ext macros define fonts CB, CI, and CR,
and some groff manual pages actually use them in .ft requests.
It's easy enough to handle these .ft requests in mandoc, too.

6 years agoImplement the roff(7) .nop (no operation) request.
Ingo Schwarze [Fri, 10 Aug 2018 04:41:25 +0000 (04:41 +0000)]
Implement the roff(7) .nop (no operation) request.
Examples of manual pages (ab)using it
include groff(7), chem(1), groff_mom(7), and groff_hdtbl(7).

6 years agoIf somebody asks "man 3 chmod",
Ingo Schwarze [Thu, 9 Aug 2018 17:30:36 +0000 (17:30 +0000)]
If somebody asks "man 3 chmod",
don't respond with the lie: "No entry for chmod in the manual."
Instead, say "No entry for chmod in section 3 of the manual."
Came up after a question from kn@; OK kn@.

6 years agosome fixes for the "www" and "www-install" maintainer targets
Ingo Schwarze [Thu, 9 Aug 2018 17:28:23 +0000 (17:28 +0000)]
some fixes for the "www" and "www-install" maintainer targets

6 years agorelease 1.14.4 VERSION_1_14_4
Ingo Schwarze [Wed, 8 Aug 2018 14:47:38 +0000 (14:47 +0000)]
release 1.14.4

6 years agoEven though we strongly discourage escaping hyphens in manual pages
Ingo Schwarze [Wed, 8 Aug 2018 14:30:48 +0000 (14:30 +0000)]
Even though we strongly discourage escaping hyphens in manual pages
in general, when introducing the *typographic* term "hyphen",
actually display a real hyphen in output modes supporting it.

6 years agoReorder the text in the "Dashes and Hyphens" subsection to keep the
Ingo Schwarze [Wed, 8 Aug 2018 14:16:08 +0000 (14:16 +0000)]
Reorder the text in the "Dashes and Hyphens" subsection to keep the
simplest and most important instructions together and at the
beginning.  No text change.
Suggested by jmc@.

6 years agoClarify the confusing "(text)" annotation in the character lists.
Ingo Schwarze [Wed, 8 Aug 2018 14:03:27 +0000 (14:03 +0000)]
Clarify the confusing "(text)" annotation in the character lists.
In some cases, it meant "render as an ASCII character in output
modes that have a notion of codepoints" (e.g. UTF-8, HTML); in other
cases, "render in the text font in output modes that also provide
a special font for mathematical symbols" (e.g. PostScript, PDF).
Also explicitly annotate the escape sequences that use a special
font if available.
OK bentley@

6 years agoAfter years of deliberation, finally provide a clear recommendation
Ingo Schwarze [Wed, 8 Aug 2018 13:54:05 +0000 (13:54 +0000)]
After years of deliberation, finally provide a clear recommendation
for hyphens and minus signs in manual pages.
Since there is consensus that a typographically perfect solution is
impossible, let's KISS - just write "-", don't bother with "\-", all
currently relevant manual page formatters can handle "-" reasonably.
OK jmc@ bentley@

6 years agoscanned to groff manual pages for todo items;
Ingo Schwarze [Mon, 6 Aug 2018 14:16:30 +0000 (14:16 +0000)]
scanned to groff manual pages for todo items;
the sheer number of issues is amazing,
but they all look feasible

6 years agoFix an off-by-one string read access that could happen if an empty
Ingo Schwarze [Wed, 1 Aug 2018 16:00:58 +0000 (16:00 +0000)]
Fix an off-by-one string read access that could happen if an empty
string argument preceded a string argument beginning with "--".
Found by Leah Neukirchen <leah at vuxu dot org> with -Wpointer-compare.

6 years agoAfter rewriting the parse buffer from scratch, we also have to reset
Ingo Schwarze [Wed, 1 Aug 2018 15:40:17 +0000 (15:40 +0000)]
After rewriting the parse buffer from scratch, we also have to reset
the parse point to the beginning of the new buffer or we risk out
of bounds accesses.  Bug found by Leah Neukirchen <leah at vuxu dot
org> with valgrind on Void Linux.

6 years agoAvoid a read access one byte beyond the end of an allocated string
Ingo Schwarze [Wed, 1 Aug 2018 13:46:15 +0000 (13:46 +0000)]
Avoid a read access one byte beyond the end of an allocated string
which occurred in situations like ".Fl a Cm --"; found by
Leah Neukirchen <leah at vuxu dot org> with valgrind on Void Linux.

6 years agomore 1.14.4 release preparations:
Ingo Schwarze [Tue, 31 Jul 2018 15:34:00 +0000 (15:34 +0000)]
more 1.14.4 release preparations:
autodetect whether the compiler can use -W and -static,
clearer output from ./configure,
and adjust some configuration instructions

6 years agomakewhatis -p complains about language subdirectories
Ingo Schwarze [Tue, 31 Jul 2018 15:25:55 +0000 (15:25 +0000)]
makewhatis -p complains about language subdirectories

6 years agohtml.c now uses ohash, and new file compat_strndup.c
Ingo Schwarze [Tue, 31 Jul 2018 10:25:33 +0000 (10:25 +0000)]
html.c now uses ohash, and new file compat_strndup.c

6 years agofirst steps toward the 1.14.4 release
Ingo Schwarze [Tue, 31 Jul 2018 10:18:15 +0000 (10:18 +0000)]
first steps toward the 1.14.4 release

6 years agoIssue a STYLE message when normalizing the date format in .Dd/.TH.
Ingo Schwarze [Sat, 28 Jul 2018 18:34:15 +0000 (18:34 +0000)]
Issue a STYLE message when normalizing the date format in .Dd/.TH.
Leah Neukirchen pointed out that mdoclint(1) used to warn about a
leading zero before the day number, so we know that both NetBSD and
Void Linux want the message.  It does no harm on OpenBSD because
Mdocdate always does the right thing anyway.
jmc@ agrees that it makes sense in contexts not using Mdocdate.

6 years agoremove two entries that were done
Ingo Schwarze [Sat, 28 Jul 2018 18:32:17 +0000 (18:32 +0000)]
remove two entries that were done