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.
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.
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.
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.
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.
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.
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@.
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?
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.
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().
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.
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>.
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: "~".
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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@.
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.
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@.
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@
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@
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.
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.
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.
more 1.14.4 release preparations:
autodetect whether the compiler can use -W and -static,
clearer output from ./configure,
and adjust some configuration instructions
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.
Remove more redundant element selectors where the class selector
is already sufficient. John Gardner tells me that "CSS selectors
should only contain what's necessary to target their subjects".
Ingo Schwarze [Mon, 25 Jun 2018 14:53:58 +0000 (14:53 +0000)]
Get rid of the last explicit length in HTML style= attributes.
Even though style=height is not particularly harmful for responsive
design except for very large arguments which don't really occur in
practice, it is not useful either: nobody should use .sp in manual
pages, in particular not with an argument. Even if somebody does,
ignoring the argument will likely make the output look better rather
than worse. Consequently, simplify by dropping a useless feature.
Ingo Schwarze [Mon, 25 Jun 2018 13:45:57 +0000 (13:45 +0000)]
Do not write <colgroup> elements. Their only purpose is to enforce
author-specified column widths, which can harm responsive design and
provide no real benefit: HTML rendering engines usually do just
fine automatically selecting appropriate column widths.
Ingo Schwarze [Mon, 25 Jun 2018 13:33:04 +0000 (13:33 +0000)]
Ignore author-specified indentation for .RS; it harms responsive
design. Use the existing @media-dependent indent instead.
This removes the last style= attribute from man(7) output.
Ingo Schwarze [Mon, 18 Jun 2018 01:49:15 +0000 (01:49 +0000)]
Revert previous: style=height is still used by roff_html.c, and it
doesn't actually harm responsive design, so keep it for now.
Bug reported in de.comp.os.unix.bsd via naddy@, thanks.
Ingo Schwarze [Sun, 10 Jun 2018 16:15:43 +0000 (16:15 +0000)]
In HTML output, for lists that have an -indent argument, just use
a uniform indentation in CSS adapted to the viewport width and
ignore the value of the argument taken from mdoc(7). While
author-specified widths somewhat work as a micro-optimization in
terminal and typeset output, they are nothing but harmful in HTML
style= attributes because they break responsive design, whereas
using a reasonable default indent almost never results in ugly
output. Admittedly, the author-specified width might occasionally
look even better, but only slightly so, and only for some viewport
sizes.
Based on guidance provided by John Gardner.
Ingo Schwarze [Sun, 10 Jun 2018 15:12:35 +0000 (15:12 +0000)]
When formatting man(7) documents that do not contain .SH macros
with -Tps or -Tpdf, do not squeeze the whole text beyond the right
margin. Bug reported by Will Backman during BSDCan.
Ingo Schwarze [Tue, 29 May 2018 20:32:45 +0000 (20:32 +0000)]
Remove redundant value= attributes from option elements,
and use type=search rather than type=text for the input element
because it tends to better support autocompletion.
Both suggested by John Gardner <gardnerjohng at gmail dot com>.
Ingo Schwarze [Tue, 29 May 2018 01:55:50 +0000 (01:55 +0000)]
Ignore author-specified -width arguments for -tag and -hang lists
in HTML output. For terminal and typeset output, such arguments
kind of work to achieve presentational micro-optimization.
But for HTML, they only do harm.
Large increases usually look ugly. Large reductions are impossible
since the default is not large in the first place. Small tweaks in
either direction are not important; at least not important enough
to justify making responsive design impossible.
Triggered by John Gardner's suggestion to further reduce style=
attributes in the HTML code, in particular those containing hard-coded
lengths.
Ingo Schwarze [Mon, 28 May 2018 15:39:25 +0000 (15:39 +0000)]
John Gardner tells me that among frontend developers, gratuitous use
of double selectors like "element.class" is considered poor style.
When doing selection mainly by elements is not appropriate because
most elements require several different styles, exclusively selecting
by class is less cumbersome, more concise, and more flexible.
So drop the elements from the selectors, except where they are
required for disambiguation and except where they add clarity due
to the presence of child selectors.
Ingo Schwarze [Mon, 28 May 2018 14:13:36 +0000 (14:13 +0000)]
URL-fragment strings can only contain certain characters.
Fixing HTML syntax violations e.g. in pf.conf(5) and ifconfig(8)
reported by Anton Lazarov <lists at wrant dot com>.
Ingo Schwarze [Sat, 26 May 2018 20:04:41 +0000 (20:04 +0000)]
Start with baby steps towards responsive design:
Use a @media width query to select a set of default indentations.
Suggested by John Gardner <gardnerjohng at gmail dot com>.
Ingo Schwarze [Sat, 26 May 2018 17:38:01 +0000 (17:38 +0000)]
Use em units rather than ex units for horizontal lengths.
John Gardner and others tell me it produces more predictable results
and is generally considered better style.
Also use 0em instead of 0ex, in general.
Ingo Schwarze [Fri, 25 May 2018 20:23:51 +0000 (20:23 +0000)]
Do not write duplicate id= attributes, they violate HTML syntax.
Append suffixes for disambiguation. Issue first reported by Jakub
Klinkovsky <j dot l dot k at gmx dot com> (Arch Linux).