| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
recallocarray() the string buffer, to avoid leaving such contents
around in the address space. Don't bother doing so for the buffer
which contains aslr'd pointers...
OK millert@
|
|
|
|
| |
This adds clarity and avoids compiler warnings.
|
|
|
|
|
|
|
| |
Pass the right object to html_reset() or it will crash
when rendering more than one manual page to HTML in a row.
Bug reported by Abel Romero Perez <romeroperezabel at gmail dot com>.
Patch from otto@.
|
|
|
|
|
|
|
|
|
|
|
| |
because it is an abuse of semantic macros for device-specific
presentational effects, this idiom is so widespread that it makes
sense to convert it to the recommended ".Fl \-long" during the
validation phase. For example, this improves HTML formatting
in pages where authors have used the dubious .Fl Fl.
Feature suggested by Steffen Nurpmeso <steffen at sdaoden dot eu>
on freebsd-hackers.
|
|
|
|
|
| |
reverting a minor part of rev. 1.21. Contrary to what i thought, that
attribute *is* still supported for a small number of unusual cases.
|
|
|
|
|
| |
disagrees with the section number given in the .Dt or .TH macro;
feature suggested and patch tested by jmc@
|
|
|
|
|
|
|
|
|
| |
and reserve the character '~' for that purpose.
Bug found by validator.w3.org in openssl(1), which contains both a
tag "tls1_2" and a second instance of a tag "tls1", which also resulted
in "tls1_2", causing a clash. Now, the second instance of "tls1" is
rendered as "tls1~2" instead, employing the newly reserved '~'.
|
|
|
|
| |
to the first few letters, similar to what was earlier done for .Pp.
|
|
|
|
| |
apart, NODE_ID occurring earlier than NODE_HREF.
|
|
|
|
|
| |
Complete includes, add several functions, no more <?xml?>,
no more style attributes, NODE_HREF flag, mention roff_html.c.
|
|
|
|
| |
to the first word, or the first few words if they are short.
|
|
|
|
|
| |
attribute for the purpose. No functional change intended.
The purpose is to make it possible to later attach tags to text nodes.
|
|
|
|
|
|
|
| |
with NODE_HREF) from the target element of the link (still marked
with NODE_ID). In many cases, use this to move the target to the
beginning of the paragraph, such that readers don't get dropped
into the middle of a sentence.
|
|
|
|
|
|
| |
In HTML output, improve the logic for writing inside permalinks:
skip them when there is no child content or when there is a risk
that the children might contain flow content.
|
|
|
|
| |
in the same way as it was done for .Sh and .Ss in mdoc(7)
|
|
|
|
|
|
| |
for consistency with the dominant style used in mandoc.
No functional change.
Patch from Martin Vahlensieck <academicsolutions dot ch>.
|
|
|
|
|
| |
fixing a build failure of mandoc-portable on Arch Linux
reported by Stephen Gregoratto <dev at sgregoratto dot me>.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
deleted before starting the pager, even when earlier input files
had written to it; thanks to weerd@ for reporting that bug.
Since we now generate tags for section headers, we almost always
generate at least some. Consequently, while fixing the above bug,
simplify the code by never deleting the tags file before the pager
exits, not even in the rare case that the file happens to be empty.
Hence, this patch is -75 +63 LOC even though it fixes two bugs.
While deleting the output files belongs after exit from the pager,
closing them should be done before it is started. Collect the
related code, which was scattered in various places, to where
it belongs, in a dedicated function in the term_tag.c module.
As a side benefit, never fclose(2) stdout, only dup2(2) to it.
Similarly, when the -O tag argument wasn't found in the last file
formatted, there was a complaint about "no such tag" even when the
argument did occur in earlier files. Fix that by looking for a
matching tag after every formatted file rather than just once at
the very end. Given that command line arguments aren't properties
of the file(s) being formatted, that check is a job for the main
program, not for the formatters, so while fixing the check, move
it from term_tag.c to main.c.
|
|
|
|
| |
For example, this makes ":tCo-processes" work in ksh(1).
|
|
|
|
|
|
|
| |
section and subsection headers in terminal output, too. Even though
admittedly, commands like "/SEE" and "/ Subsec" work, too, there
is no downside, and besides, with the recent improvements in the
tagging framework, implementation cost is negligible.
|
|
|
|
|
|
| |
never write a ctags(1) file, using a pager still requires writing the
main output file and passing the file name to the pager.
Recent regression mentioned on IRC and reported by kn@.
|
|
|
|
| |
related to tags.c rev. 1.30
|
|
|
|
|
|
|
|
| |
bringing the behaviour for mdoc(7) closer to what is already done
for man(7).
Triggered by the observation of kn@ that automatic tagging didn't
work very well for find(1) primaries.
OK kn@
|
|
|
|
|
|
| |
even when no output formatter was allocated because all pages
shown were preformatted. Regression in previous reported
by <Andreas dot Kahari at abc dot se> on bugs@.
|
|
|
|
| |
by having it run ./configure with native fts and ohash disabled.
|
|
|
|
| |
This fixes a crash in makewhatis(8) encountered by naddy@.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in tag.{h,c} and {mdoc,man}_validate.c
and into a formatting part including command line argument checking
in term_tag.{h,c}, html.c, and {mdoc|man}_{term|html}.c.
Immediate functional benefits include:
* Improved prioritization of automatic tags for .Em and .Sy.
* Avoiding bogus automatic tags when .Em, .Fn, or .Sy are explicitly tagged.
* Explicit tagging of .Er and .Fl now works in HTML output.
* Automatic tagging of .IP and .TP now works in HTML output.
But mainly, this patch provides clean earth to build further improvements on.
Technical changes:
* Main program: Write a tag file for ASCII and UTF-8 output only.
* All formatters: There is no more need to delay writing the tags.
* mdoc(7)+man(7) formatters: No more need for elaborate syntax tree inspection.
* HTML formatter: If available, use the "string" attribute as the tag.
* HTML formatter: New function to write permalinks, to reduce code duplication.
Style cleanup in the vicinity while here:
* mdoc(7) terminal formatter: To set up bold font for children,
defer to termp_bold_pre() rather than calling term_fontpush() manually.
* mdoc(7) terminal formatter: Garbage collect some duplicate functions.
* mdoc(7) HTML formatter: Unify <code> handling, delete redundant functions.
* Where possible, use switch statements rather than if cascades.
* Get rid of some more Yoda notation.
The necessity for such changes was first discussed with kn@, but i didn't
bother him with a request to review the resulting -673/+782 line patch.
|
|
|
|
| |
Consequently, write an explicit end tag for <mark> elements.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes the offset of two lines in terminal output
and this improves HTML output by putting the id= attribute
and <a> element into the respective <h1> or <h2> element rather
than writing an additional <mark> element.
To that end, introduce node flags NODE_ID (to make the node a link
target, for example by writing an HTML id= attribute or by calling
tag_put()) and NODE_HREF (to make the node a link source, used only
in HTML output, used only to write an <a class="permalink"> element).
In particular:
* In the validator, generalize the concept of the "next node"
such that it also works before .Sh and .Ss.
* If the first argument of .Tg is empty, don't forget to complain
if there are additional arguments, which will be ignored.
* In the terminal formatter, support writing of explicit tags
for all kinds of nodes, not just for .Tg.
* In deroff(), allow nodes to have an explicit string representation
even when they aren't text nodes. Use this for explicitly tagged
section headers. Suprisingly, this is sufficient to make HTML
output work, without explicit code changes in the HTML formatter.
* In syntax tree output, display NODE_ID and NODE_HREF.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
they are skipped when looking for previous or following high-level
macros. Examples include roff(7) .ft, .ll, and .ta, mdoc(7) .Sm
and .Tg, and man(7) .DT and .PD. Use this concept for a variety
of improved decisions in various validators and formatters.
While here,
* remove a few const qualifiers on struct arguments that caused trouble;
* get rid of some more Yoda notation in the vicinity;
* and apply some other stylistic improvements in the vicinity.
I found this class of issues while considering .Tg patches from kn@.
|
|
|
|
|
|
|
|
|
|
| |
The test uses U+07FF NKO TAMAN SIGN because it is the highest
code point having a two-byte UTF-8 representation.
This character is a new single-width punctuation character in
Unicode 11, such that mandoc now does correct horizontal spacing.
We already used the code point for the test before it was assigned,
which resulted in weird spacing because wcwidth(3) returns -1 for
unassigned code points.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The reason was that as a last resort when failing to find a page
name in mandoc.db(5) or at a few well well-defined fully qualified
file names, man(1) uses glob(3) to look for candidate files in
relevant directories, because some operating systems have weird
file name extensions, for example pcap.3pcap and BF_set_key.3ssl
on Linux. But during that globbing, the metacharacters "*?[" need
to be escaped in the name, section, and path supplied by the user,
or you would get weird false positives and misleading warning
messages and would be unable to use the fallback for path or file
names that actually contain an opening bracket.
Feedback and OK espie@.
|
|
|
|
| |
before the width argument
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
because we only retain the language for backward compatibility in
the first place. Part of the research done by <G dot Branden dot
Robinson at gmail dot com>, see the list <groff at gnu dot org> for
details.
No change to the following conventions: Consider portable whatever
made it into GNU troff no later than 4.4BSD. For portable extensions,
mention their origin at the end of the description. For non-portable
extensions, for example from man-ext, usually warn earlier, near
the beginning of the description.
|
|
|
|
| |
triggered by a question from Stephen Gregoratto <dev at sgregoratto dot me>
|
| |
|
|
|
|
|
|
| |
Triggered by a question from Jason A. Donenfeld.
While here, delete three COMPATIBILITY entries that i fixed some time ago.
|
|
|
|
| |
Noticed because Branden Robinson worked on related documentation in groff.
|
|
|
|
|
|
|
|
| |
starting a new output line, and merely starting a new line of HTML
code isn't sufficient to achieve that. Solve this in the same way
as mdoc_html.c already does it, by printing a <br/> element.
Fixing a bug reported by Jason A. Donenfeld <Jason at zx2c4 dot com>
in the wg-quick(8) manual page on manpages.debian.org.
|
|
|
|
|
| |
which has a misleading syntax. It was declared obsolete and
superseded by the "manpath" directive five years ago.
|
|
|
|
|
| |
even though it has only one entry in the portable version.
Do not add /etc/examples/man.conf for the portable version, though.
|
|
|
|
|
|
|
|
| |
Jonathan Gray found it in the "Combined Table of Contents" in Doug
McIlroy's "A Research UNIX Reader", which contains a table of which
edition manuals appeared in, and in both the "Table of Contents"
(page vi) and the body (page 89) of the printed UNIX Programmer's
Manual (June 12, 1972) from bitsavers.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and man-db packages, print the manpath if the -w option is given
without a following name argument.
This quirk has been in man-1.6 since at least man-1.5e (1998)
and in man-db since 2012.
Using this feature in portable software is a dubious idea because the
internal organization of manual page directories varies in about a
dozen respects among operating systems, so even if you get the answer,
there is no portable way to use it for looking up anything inside.
However, Matej Cepl <mcepl at suse dot cz> made me aware that some
software, for example the manual viewing functionality in the newest
editors/neovim code, unwisely relies on this feature anyway.
No objections were raised when this patch was shown on tech@.
|
|
|
|
|
| |
in the man(1) manual page. This bugfix is needed to prevent
the command "man -lw" from dereferencing a NULL pointer.
|
|
|
|
|
|
|
|
| |
That line was a bad idea in the first place, it tried to be too clever,
and it failed in different ways on different platforms. Even when it
succeeded, what make(1) considered the default wasn't always useful.
Having a simple and robust default and asking users to override it
when needed is better.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the report from <Andreas dot Kahari at abc dot se> on ports@:
For a symlink, use the first of the following names that is available:
1. In -t mode, the symlink itself (unchanged).
2. When the (unresolved) symlink already resides inside the manpath,
just strip the manpath and use the rest (unchanged).
3. When prefix(es) of the unresolved symlink point to the manpath,
strip the longest such prefix and use the rest (new); this fixes
situations where the manpath or one of its parent directories is a
symlink and at the same time contains symlinks to manual pages.
4. Fall back to the fully resolved symlink, with the manpath stripped
(new); this may for example happen when the command line passes
symlinks from outside the manpath that point to manual pages inside
the manpath, or if manual page trees contain symlinks to symlinks and
not all of them are given on the command line.
The fallback (4) isn't perfect. You can construct symlink spaghetti
in such a way that this algorithm will not enter all manual page
names into the database that a human would be able to deduce. But
i do not expect such spaghetti to actually occur in practice (not
even in ports), and a full fix would require re-implementing
realpath(3) in terms of step-by-step readlink(2) calls, repeating
the complicated algorithm (3) after each step.
While here, also stop using PATH_MAX as the size of a static buffer
in filescan(); on some systems, it can be unreasonably large.
Instead, allocate path strings dynamically.
|
|
|
|
|
|
|
|
|
|
| |
This bug caused sockets and character special devices to be accepted
as manual pages if they appeared inside manpaths, and
it caused incorrect file names to be entered into the database when
the manpath or one of its parent directories was a symbolic link.
This fixes the issues reported by <Andreas dot Kahari at abc dot se>
on ports@, but additional issues remain when symbolic links are
contained in a manpath that involves another symbolic link.
|
|
|
|
|
|
|
| |
Do not abuse strstr(3) to check whether one long string starts with
another long string. Instead, use strncmp(3) with the proper length.
In set_basedir(), also reset *basedir in the error brances for extra safety.
While here, invert some more Yoda conditions in the neighbourhood.
|
|
|
|
|
|
| |
symbolic constants for tagging priorities.
This review also made me find a minor bug: do not upgrade
TAG_FALLBACK to TAG_WEAK when there is trailing whitespace.
|