Import mdocml 1.13.3
This commit is contained in:
parent
7d5354266f
commit
0ae9da150d
117
INSTALL
117
INSTALL
@ -1,18 +1,13 @@
|
|||||||
$Id: INSTALL,v 1.9 2014/12/11 07:44:46 schwarze Exp $
|
$Id: INSTALL,v 1.10 2015/03/09 21:00:14 schwarze Exp $
|
||||||
|
|
||||||
About mdocml, the portable mandoc distribution
|
About mdocml, the portable mandoc distribution
|
||||||
----------------------------------------------
|
----------------------------------------------
|
||||||
The mandoc manpage compiler toolset is a suite of tools compiling
|
The mandoc manpage compiler toolset is a suite of tools compiling
|
||||||
mdoc(7), the roff(7) macro language of choice for BSD manual pages,
|
mdoc(7), the roff(7) macro language of choice for BSD manual pages,
|
||||||
and man(7), the predominant historical language for UNIX manuals.
|
and man(7), the predominant historical language for UNIX manuals.
|
||||||
Since the present version 1.13.2, it includes a man(1) manual viewer
|
It includes a man(1) manual viewer and additional tools.
|
||||||
in addition to the apropos(1) manual page search tool.
|
|
||||||
For general information, see <http://mdocml.bsd.lv/>.
|
For general information, see <http://mdocml.bsd.lv/>.
|
||||||
|
|
||||||
In this document, we describe the installation and deployment of
|
|
||||||
mandoc(1), first as a simple, standalone formatter, and then as part of
|
|
||||||
the man(1) system.
|
|
||||||
|
|
||||||
In case you have questions or want to provide feedback, read
|
In case you have questions or want to provide feedback, read
|
||||||
<http://mdocml.bsd.lv/contact.html>. Consider subscribing to the
|
<http://mdocml.bsd.lv/contact.html>. Consider subscribing to the
|
||||||
discuss@ mailing list mentioned on that page. If you intend to
|
discuss@ mailing list mentioned on that page. If you intend to
|
||||||
@ -21,7 +16,7 @@ tech@ mailing list, too.
|
|||||||
|
|
||||||
Enjoy using the mandoc toolset!
|
Enjoy using the mandoc toolset!
|
||||||
|
|
||||||
Ingo Schwarze, Karlsruhe, December 2014
|
Ingo Schwarze, Karlsruhe, March 2015
|
||||||
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
@ -32,10 +27,6 @@ or available via a binary package or a ports system. A list of the
|
|||||||
latest bundled and ported versions of mandoc for various operating
|
latest bundled and ported versions of mandoc for various operating
|
||||||
systems is maintained at <http://mdocml.bsd.lv/ports.html>.
|
systems is maintained at <http://mdocml.bsd.lv/ports.html>.
|
||||||
|
|
||||||
If mandoc is installed, you can check the version by running "mandoc -V".
|
|
||||||
You can find the version contained in this distribution tarball
|
|
||||||
by running "./configure".
|
|
||||||
|
|
||||||
Regarding how packages and ports are maintained for your operating
|
Regarding how packages and ports are maintained for your operating
|
||||||
system, please consult your operating system documentation.
|
system, please consult your operating system documentation.
|
||||||
To install mandoc manually, the following steps are needed:
|
To install mandoc manually, the following steps are needed:
|
||||||
@ -66,17 +57,34 @@ package using some kind of fake root mechanism, you may need a
|
|||||||
command like "make DESTDIR=... install". Read the *-install targets
|
command like "make DESTDIR=... install". Read the *-install targets
|
||||||
in the "Makefile" to understand how DESTDIR is used.
|
in the "Makefile" to understand how DESTDIR is used.
|
||||||
|
|
||||||
6. To set up a man.cgi(8) server, read its manual page.
|
6. If you want to use the integrated man(1) and your system uses
|
||||||
|
manpath(1), make sure it is configured correctly, in particular,
|
||||||
|
it returns all directory trees where manual pages are installed.
|
||||||
|
Otherwise, if your system uses man.conf(5), make sure it contains
|
||||||
|
a "_whatdb" line for each directory tree, and the order of these
|
||||||
|
lines meets your wishes.
|
||||||
|
|
||||||
7. To use mandoc(1) as your man(1) formatter, read the "Deployment"
|
7. If you compiled with database support, run the command "sudo
|
||||||
sections below.
|
makewhatis" to build mandoc.db(5) databases in all the directory
|
||||||
|
trees configured in step 6. Whenever installing new manual pages,
|
||||||
|
re-run makewhatis(8) to update the databases, or apropos(1) will
|
||||||
|
not find the new pages.
|
||||||
|
|
||||||
|
8. To set up a man.cgi(8) server, read its manual page.
|
||||||
|
|
||||||
|
Note that some man(7) pages may contain low-level roff(7) markup
|
||||||
|
that mandoc does not yet understand. On some BSD systems using
|
||||||
|
mandoc, third-party software is vetted on whether it may be formatted
|
||||||
|
with mandoc. If not, groff(1) is pulled in as a dependency and
|
||||||
|
used to install a pre-formatted "catpage" instead of directly as
|
||||||
|
manual page source.
|
||||||
|
|
||||||
|
|
||||||
Understanding mandoc dependencies
|
Understanding mandoc dependencies
|
||||||
---------------------------------
|
---------------------------------
|
||||||
The mandoc(1) and demandoc(1) utilities have no external dependencies.
|
The mandoc(1), man(1), and demandoc(1) utilities have no external
|
||||||
However, makewhatis(8), apropos(1), and man(1) depend on the following
|
dependencies, but makewhatis(8) and apropos(1) depend on the
|
||||||
software:
|
following software:
|
||||||
|
|
||||||
1. The SQLite database system, see <http://sqlite.org/>.
|
1. The SQLite database system, see <http://sqlite.org/>.
|
||||||
The recommended version of SQLite is 3.8.4.3 or newer. The mandoc
|
The recommended version of SQLite is 3.8.4.3 or newer. The mandoc
|
||||||
@ -142,76 +150,3 @@ for unexpected failures. Those are most likely to happen if headers
|
|||||||
or libraries are installed in unusual places or interfaces defined
|
or libraries are installed in unusual places or interfaces defined
|
||||||
in unusual headers. You can also look at the file "config.h" and
|
in unusual headers. You can also look at the file "config.h" and
|
||||||
check that no "#define HAVE_*" differ from your expectations.
|
check that no "#define HAVE_*" differ from your expectations.
|
||||||
|
|
||||||
|
|
||||||
Deployment using the integrated man(1) viewer
|
|
||||||
---------------------------------------------
|
|
||||||
This mode of deployment requires database support. In case of
|
|
||||||
doubt, look at the section "user settings related to database
|
|
||||||
support" in the file configure.local.example.
|
|
||||||
|
|
||||||
Deployment requires the following steps:
|
|
||||||
|
|
||||||
1. Build and install mandoc as described above in steps 2 to 5
|
|
||||||
below "Installation".
|
|
||||||
|
|
||||||
2. If your system uses manpath(1), make sure it is configured
|
|
||||||
correctly, in particular, it returns all directory trees where
|
|
||||||
manual pages are installed. If your system uses man.conf(5), make
|
|
||||||
sure it contains a "_whatdb" line for each directory tree, and the
|
|
||||||
order of these lines meets your wishes.
|
|
||||||
|
|
||||||
3. Run the command "sudo makewhatis" to build mandoc.db(5) databases
|
|
||||||
in all the directory trees configured in step 2.
|
|
||||||
|
|
||||||
At this point, your new man(1), apropos(1), and whatis(1) should work.
|
|
||||||
Otherwise, please look at <http://mdocml.bsd.lv/contact.html>, both
|
|
||||||
for help and to have these instructions improved.
|
|
||||||
|
|
||||||
Whenever installing new manual pages, re-run makewhatis(8) to update
|
|
||||||
the databases, or man(1) will not find the new pages.
|
|
||||||
|
|
||||||
|
|
||||||
Deployment using your system's native man(1) viewer
|
|
||||||
---------------------------------------------------
|
|
||||||
This mode of deployment does not require database support,
|
|
||||||
so it works even if you don't have SQLite3.
|
|
||||||
|
|
||||||
Usually, you can have your default installation and mandoc(1) work right
|
|
||||||
alongside each other by using user-specific versions of the files
|
|
||||||
mentioned below.
|
|
||||||
|
|
||||||
0. Back up each file you want to change!
|
|
||||||
|
|
||||||
1. First see whether your system has "/etc/man.conf" or "/etc/manpath.conf"
|
|
||||||
(if it has neither, but man(1) is functional, then let us know) or,
|
|
||||||
if running as your own user, a per-user override file. In either
|
|
||||||
case, find where man(1) is executing nroff(1) or groff(1) to format
|
|
||||||
manuals. Replace these calls with mandoc(1).
|
|
||||||
|
|
||||||
2. Then make sure that man(1) isn't running preprocessors, so you may
|
|
||||||
need to replace tbl(1), eqn(1), and similar references with cat(1).
|
|
||||||
Some man(1) implementations, like that on Mac OSX, let you run "man -d"
|
|
||||||
to see how the formatter is invoked. Use this to test your changes. On
|
|
||||||
Mac OS X, for instance, man(1) will prepend all files with ".ll" and
|
|
||||||
".nr" to set the terminal size, so you need to pass "tail -n+2 |
|
|
||||||
mandoc(1)" to disregard them.
|
|
||||||
|
|
||||||
3. Finally, make sure that mandoc(1) is actually being invoked instead
|
|
||||||
of cached pages being pulled up. You can usually do this by commenting
|
|
||||||
out NOCACHE or similar.
|
|
||||||
|
|
||||||
|
|
||||||
mandoc(1) still has a long way to go in understanding non-trivial
|
|
||||||
low-level roff(7) markup embedded in some man(7) pages. On the BSD
|
|
||||||
systems using mandoc(1), third-party software is generally vetted
|
|
||||||
on whether it may be formatted with mandoc(1). If not, groff(1)
|
|
||||||
is pulled in as a dependency and used to install a pre-formatted
|
|
||||||
"catpage" instead of directly as manual page source.
|
|
||||||
|
|
||||||
For more background on switching operating systems to use mandoc(1)
|
|
||||||
instead of groff(1) to format manuals, see the BSDCan and EuroBSDCon
|
|
||||||
presentations by Ingo Schwarze:
|
|
||||||
<http://www.openbsd.org/papers/bsdcan11-mandoc-openbsd.html>
|
|
||||||
<http://www.openbsd.org/papers/bsdcan14-mandoc.pdf>
|
|
||||||
<http://www.openbsd.org/papers/eurobsdcon2014-mandoc-paper.pdf>
|
|
||||||
|
6
Makefile
6
Makefile
@ -1,7 +1,7 @@
|
|||||||
# $Id: Makefile,v 1.456 2015/02/16 16:23:54 schwarze Exp $
|
# $Id: Makefile,v 1.457 2015/03/13 12:35:32 schwarze Exp $
|
||||||
#
|
#
|
||||||
# Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
# Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
# Copyright (c) 2011, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
|
# Copyright (c) 2011, 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, and distribute this software for any
|
# Permission to use, copy, modify, and distribute this software for any
|
||||||
# purpose with or without fee is hereby granted, provided that the above
|
# purpose with or without fee is hereby granted, provided that the above
|
||||||
@ -15,7 +15,7 @@
|
|||||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
VERSION = 1.13.2
|
VERSION = 1.13.3
|
||||||
|
|
||||||
# === LIST OF FILES ====================================================
|
# === LIST OF FILES ====================================================
|
||||||
|
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
BUILD_TARGETS = base-build
|
|
||||||
INSTALL_TARGETS = base-install db-install
|
|
||||||
CFLAGS = -g -W -Wall -Wstrict-prototypes -Wno-unused-parameter -Wwrite-strings -I/usr/local/include
|
|
||||||
DBLIB = -L/usr/local/lib -lsqlite3
|
|
||||||
STATIC = -static
|
|
||||||
PREFIX = /usr/local
|
|
||||||
BINDIR = /usr/local/bin
|
|
||||||
SBINDIR = /usr/local/sbin
|
|
||||||
INCLUDEDIR = /usr/local/include/mandoc
|
|
||||||
LIBDIR = /usr/local/lib/mandoc
|
|
||||||
MANDIR = /usr/local/man
|
|
||||||
EXAMPLEDIR = /usr/local/share/examples/mandoc
|
|
||||||
WWWPREFIX = /var/www
|
|
||||||
HTDOCDIR = /var/www/htdocs
|
|
||||||
CGIBINDIR = /var/www/cgi-bin
|
|
||||||
BINM_APROPOS = apropos
|
|
||||||
BINM_MAN = man
|
|
||||||
BINM_WHATIS = whatis
|
|
||||||
BINM_MAKEWHATIS = makewhatis
|
|
||||||
MANM_MAN = man
|
|
||||||
MANM_MDOC = mdoc
|
|
||||||
MANM_ROFF = roff
|
|
||||||
MANM_EQN = eqn
|
|
||||||
MANM_TBL = tbl
|
|
||||||
INSTALL = install
|
|
||||||
INSTALL_PROGRAM = install -m 0555
|
|
||||||
INSTALL_LIB = install -m 0444
|
|
||||||
INSTALL_MAN = install -m 0444
|
|
||||||
INSTALL_DATA = install -m 0444
|
|
||||||
MAIN_OBJS = $(BASE_OBJS) $(DB_OBJS)
|
|
117
NEWS
117
NEWS
@ -1,7 +1,122 @@
|
|||||||
$Id: NEWS,v 1.8 2014/12/13 13:43:47 schwarze Exp $
|
$Id: NEWS,v 1.9 2015/03/13 12:35:32 schwarze Exp $
|
||||||
|
|
||||||
This file lists the most important changes in the mdocml.bsd.lv distribution.
|
This file lists the most important changes in the mdocml.bsd.lv distribution.
|
||||||
|
|
||||||
|
Changes in version 1.13.3, released on March 13, 2015
|
||||||
|
|
||||||
|
--- MAJOR NEW FEATURES ---
|
||||||
|
* When a manual is missing from an outdated database, let man(1)
|
||||||
|
show it anyway, using a KISS file system lookup as a fallback.
|
||||||
|
* Use this to always provide man(1), even without database support.
|
||||||
|
* Fatal errors no longer exist. If a file can be opened, mandoc
|
||||||
|
will produce some output; at worst, the output may be almost empty.
|
||||||
|
* New -Wunsupp message level.
|
||||||
|
--- POTENTIONALLY SECURITY RELEVANT BUGFIXES ---
|
||||||
|
* Fix a potential write buffer overrun on incomplete string conditionals.
|
||||||
|
http://mdocml.bsd.lv/cgi-bin/cvsweb/roff.c#rev1.241
|
||||||
|
* Fix a potential write buffer overrun on backslash at EOF in a conditional.
|
||||||
|
http://mdocml.bsd.lv/cgi-bin/cvsweb/roff.c#rev1.247
|
||||||
|
* Fix a use after free sometimes hit when validation deletes a block.
|
||||||
|
http://mdocml.bsd.lv/cgi-bin/cvsweb/mdoc_macro.c#rev1.180
|
||||||
|
--- MAJOR FUNCTIONALLY RELEVANT BUGFIXES ---
|
||||||
|
* Let man(1) show manuals for the current architecture by default,
|
||||||
|
and support the MACHINE environment variable.
|
||||||
|
* Fix the man(1) and apropos(1) -m option, it didn't work at all.
|
||||||
|
* Do not spawn a pager when there is no output.
|
||||||
|
* In makewhatis(8), fix detection of hardlinked manuals on platforms
|
||||||
|
having padding in struct inodev (typically 64bit platforms).
|
||||||
|
--- PORTABILITY IMPROVEMENTS ---
|
||||||
|
* Ignore O_CLOEXEC when the operating system doesn't provide it.
|
||||||
|
* Avoid forward reference to enum type which violates ISO C99.
|
||||||
|
* Support homebrew-style linking on Mac OS X.
|
||||||
|
--- MINOR NEW FEATURES ---
|
||||||
|
* lookup: Accept digit+letter and "n" as section names in man(1),
|
||||||
|
and consistently handle digit+letter in file name extensions.
|
||||||
|
* lookup: Speed up -s/-S by using the "mlinks" rather than the "keys" table.
|
||||||
|
* output: Insert horizontal lines between formatted manual pages.
|
||||||
|
* input: New stricter and more resilient UTF-8 parser.
|
||||||
|
* mdoc(7): Refactor block rewinding for simpler and more robust parsing.
|
||||||
|
* man(7): Use the -Ios option when .TH has less than four arguments.
|
||||||
|
* tbl(7): Implement the "center" option.
|
||||||
|
* tbl(7): New option and format parsers, improved in many respects.
|
||||||
|
* roff(7): Basic implementation of the \o escape sequence (overstrike),
|
||||||
|
and improved rendering of overstrikes in PostScript and PDF output.
|
||||||
|
* Message improvements, in particular for, but not restricted to,
|
||||||
|
eqn(7), tbl(7), and wrong numbers of arguments in mdoc(7) and man(7),
|
||||||
|
in various cases also improving output generated by invalid input.
|
||||||
|
* Delete the -V option. It serves no purpose but keeps confusing people.
|
||||||
|
* gmdiff: Minimal support for Heirloom roff.
|
||||||
|
--- RELIABILITY BUGFIXES ---
|
||||||
|
* tbl(7): Fix a read buffer overrun on 'f' at EOL in a layout.
|
||||||
|
* roff(7): Fix a read buffer overrun on incomplete numerical conditions.
|
||||||
|
* mdoc(7): Fix a NULL pointer access on .Nd followed by an explicit block.
|
||||||
|
* mdoc(7): Fix a NULL pointer access on .It Xo without .Xc.
|
||||||
|
* mdoc(7): Fix a NULL pointer access on .Eo without a tail.
|
||||||
|
* mdoc(7): Fix a NULL pointer access in the validation of empty .St macros.
|
||||||
|
* man(7)/tbl(7): Fix a NULL pointer access on .TS right after .TP.
|
||||||
|
* tbl(7): Fix a NULL pointer access on layout lines without any cells.
|
||||||
|
* eqn(7): Fix NULL pointer accesses in the terminal formatter.
|
||||||
|
* roff(7): Fix a NULL pointer access on trailing \s-/\s+ without an argument.
|
||||||
|
* gz: Fix a potential NULL pointer access after waitpid() failure.
|
||||||
|
* roff(7): Don't let the modulo operator divide by zero.
|
||||||
|
* input: Fix an assertion failure on certain invalid UTF-8 input.
|
||||||
|
* terminal output: Allow arbitrary depth of the font stack (assertion fix).
|
||||||
|
* mdoc(7): Fix assertion failures and endless loops on invalid block closing.
|
||||||
|
* mdoc(7): Fix an assertion failure on .Bl .Sm not followed by .It.
|
||||||
|
* mdoc(7): Fix an assertion failure on .Bl -column ... .El .Ta.
|
||||||
|
* tbl(7): Fix assertion failures by macros inside table data,
|
||||||
|
but do not throw away the macro arguments.
|
||||||
|
* Prevent certain kinds of unreasonable input from producing excessive
|
||||||
|
output, in one case caused by unsigned integer underflow.
|
||||||
|
* Fix a potential memory leak in makewhatis(8) on very long filenames.
|
||||||
|
--- MINOR BUGFIXES ---
|
||||||
|
* mdoc(7): Fix parsing of badly nested blocks with multiple identical blocks.
|
||||||
|
* mdoc(7): Support negative indentations for displays and lists.
|
||||||
|
* mdoc(7): Don't mistreat negative .sp arguments as large positive ones.
|
||||||
|
* mdoc(7): Some spacing fixes for .Eo/.Ec.
|
||||||
|
* man(7): Support negative horizontal widths.
|
||||||
|
* man(7): Do not print out invalid .IP arguments.
|
||||||
|
* man(7): Correctly handle scaling units after .PD.
|
||||||
|
* man(7): Support .RE with an argument.
|
||||||
|
* man(7): Fix restoring indentation after .RS with large negative arguments.
|
||||||
|
* tbl(7): Prevent tables from breaking the filling of preceding text.
|
||||||
|
* tbl(7): Fix vertical spacing at the beginning of tables.
|
||||||
|
* tbl(7): Parser and formatter fixes for line drawing and font modifiers.
|
||||||
|
* tbl(7): Correct handling of blank data lines.
|
||||||
|
* eqn(7): Add sometimes missing whitespace before equation output.
|
||||||
|
* roff(7): Fix vertical scaling, most of it was wrong.
|
||||||
|
* roff(7): Slightly improve \w width measurements.
|
||||||
|
* roff(7): Accept the historic aliases \s10 to \s39 for \s(10 to \s(39.
|
||||||
|
* roff(7): Correctly escape quotes when expanding macro arguments.
|
||||||
|
* roff(7): Correctly handle scaling units in numerical expressions,
|
||||||
|
and some other improvements to the parsing of numerical expressions.
|
||||||
|
* roff(7): Three minor fixes with respect to evaluation of conditionals.
|
||||||
|
* roff(7): Let .it accept numerical expressions, not just constants.
|
||||||
|
* mandoc_char(7): Correct some character names and renderings.
|
||||||
|
* If earlier files set a non-zero exit status, never reset it to zero.
|
||||||
|
--- THANKS TO ---
|
||||||
|
* Jonathan Gray (OpenBSD) for yet more testing with afl (the American
|
||||||
|
Fuzzy Lop security fuzzer), again resulting in many bug reports.
|
||||||
|
* Theo de Raadt (OpenBSD) for suggesting the main new feature (man(1) file
|
||||||
|
system lookup) and for reporting an important bug (pager without output).
|
||||||
|
* Theo Buehler for an important bug report (-s/-S slowness)
|
||||||
|
and for proposing a nice new feature (lines between pages).
|
||||||
|
* Jason McIntyre for an important bug report (hardlink detection)
|
||||||
|
and multiple documentation patches.
|
||||||
|
* Pascal Stumpf (OpenBSD) and Alessandro de Laurenzis for
|
||||||
|
important bug reports (architecture and man -m, respectively).
|
||||||
|
* Thomas Klausner (NetBSD) for proposing a new feature (man(7) -Ios),
|
||||||
|
a bug report, and release testing.
|
||||||
|
* Anthony Bentley, Daniel Dickman, Ted Unangst (OpenBSD) and
|
||||||
|
Kristaps Dzonsons (bsd.lv) for source code patches and bug reports.
|
||||||
|
* Christian Weisgerber (OpenBSD) for more than half a dozen bug reports.
|
||||||
|
* Carsten Kunze (Heirloom troff) for bug reports and release testing.
|
||||||
|
* Antoine Jacoutot (OpenBSD) for release testing.
|
||||||
|
* Alexis Hildebrandt (Homebrew), Baptiste Daroussin (FreeBSD),
|
||||||
|
Jonathan Perkin (SmartOS), Pedro Giffuni (FreeBSD), Svyatoslav
|
||||||
|
Mishyn (Crux Linux), Ulrich Spoerlein (FreeBSD), Jan Stary, Patrick
|
||||||
|
Keshishian, Sebastien Marie, and Steffen Nurpmeso for bug reports.
|
||||||
|
|
||||||
Changes in version 1.13.2, released on December 13, 2014
|
Changes in version 1.13.2, released on December 13, 2014
|
||||||
|
|
||||||
--- MAJOR NEW FEATURES ---
|
--- MAJOR NEW FEATURES ---
|
||||||
|
7
TODO
7
TODO
@ -1,6 +1,6 @@
|
|||||||
************************************************************************
|
************************************************************************
|
||||||
* Official mandoc TODO.
|
* Official mandoc TODO.
|
||||||
* $Id: TODO,v 1.201 2015/02/20 13:47:28 schwarze Exp $
|
* $Id: TODO,v 1.202 2015/03/11 13:11:22 schwarze Exp $
|
||||||
************************************************************************
|
************************************************************************
|
||||||
|
|
||||||
Many issues are annotated for difficulty as follows:
|
Many issues are annotated for difficulty as follows:
|
||||||
@ -557,6 +557,11 @@ Several areas can be cleaned up to make mandoc even faster. These are
|
|||||||
* structural issues
|
* structural issues
|
||||||
************************************************************************
|
************************************************************************
|
||||||
|
|
||||||
|
- Improve -O suboption parsing. Do it in the main program such that
|
||||||
|
errors can be reported. Pay attention to distinguishing the
|
||||||
|
mandoc(1) and apropos(1) styles of both options.
|
||||||
|
loc ** exist * algo ** size ** imp ***
|
||||||
|
|
||||||
- Use libz directly instead of forking gunzip(1).
|
- Use libz directly instead of forking gunzip(1).
|
||||||
Suggested by bapt at FreeBSD among others.
|
Suggested by bapt at FreeBSD among others.
|
||||||
|
|
||||||
|
4
configure
vendored
4
configure
vendored
@ -237,9 +237,7 @@ elif [ -z "${DBLIB}" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# --- manpath ---
|
# --- manpath ---
|
||||||
if [ ${BUILD_DB} -eq 0 ]; then
|
if ismanual manpath "${HAVE_MANPATH}"; then
|
||||||
HAVE_MANPATH=0
|
|
||||||
elif ismanual manpath "${HAVE_MANPATH}"; then
|
|
||||||
:
|
:
|
||||||
elif manpath 1>&3 2>&3; then
|
elif manpath 1>&3 2>&3; then
|
||||||
echo "manpath: yes" 1>&2
|
echo "manpath: yes" 1>&2
|
||||||
|
48
eqn.7
48
eqn.7
@ -1,4 +1,4 @@
|
|||||||
.\" $Id: eqn.7,v 1.33 2015/01/29 00:33:57 schwarze Exp $
|
.\" $Id: eqn.7,v 1.34 2015/03/09 20:17:23 schwarze Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
.\" Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
.\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
|
.\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -15,7 +15,7 @@
|
|||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: January 29 2015 $
|
.Dd $Mdocdate: March 9 2015 $
|
||||||
.Dt EQN 7
|
.Dt EQN 7
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -72,31 +72,31 @@ case-sensitive literals in the input:
|
|||||||
.Bd -literal -offset indent
|
.Bd -literal -offset indent
|
||||||
eqn : box | eqn box
|
eqn : box | eqn box
|
||||||
box : text
|
box : text
|
||||||
| \*q{\*q eqn \*q}\*q
|
| \(dq{\(dq eqn \(dq}\(dq
|
||||||
| \*qdefine\*q text text
|
| \(dqdefine\(dq text text
|
||||||
| \*qndefine\*q text text
|
| \(dqndefine\(dq text text
|
||||||
| \*qtdefine\*q text text
|
| \(dqtdefine\(dq text text
|
||||||
| \*qgfont\*q text
|
| \(dqgfont\(dq text
|
||||||
| \*qgsize\*q text
|
| \(dqgsize\(dq text
|
||||||
| \*qset\*q text text
|
| \(dqset\(dq text text
|
||||||
| \*qundef\*q text
|
| \(dqundef\(dq text
|
||||||
| \*qsqrt\*q box
|
| \(dqsqrt\(dq box
|
||||||
| box pos box
|
| box pos box
|
||||||
| box mark
|
| box mark
|
||||||
| \*qmatrix\*q \*q{\*q [col \*q{\*q list \*q}\*q ]*
|
| \(dqmatrix\(dq \(dq{\(dq [col \(dq{\(dq list \(dq}\(dq ]*
|
||||||
| pile \*q{\*q list \*q}\*q
|
| pile \(dq{\(dq list \(dq}\(dq
|
||||||
| font box
|
| font box
|
||||||
| \*qsize\*q text box
|
| \(dqsize\(dq text box
|
||||||
| \*qleft\*q text eqn [\*qright\*q text]
|
| \(dqleft\(dq text eqn [\(dqright\(dq text]
|
||||||
col : \*qlcol\*q | \*qrcol\*q | \*qccol\*q | \*qcol\*q
|
col : \(dqlcol\(dq | \(dqrcol\(dq | \(dqccol\(dq | \(dqcol\(dq
|
||||||
text : [^space\e\*q]+ | \e\*q.*\e\*q
|
text : [^space\e\(dq]+ | \e\(dq.*\e\(dq
|
||||||
pile : \*qlpile\*q | \*qcpile\*q | \*qrpile\*q | \*qpile\*q
|
pile : \(dqlpile\(dq | \(dqcpile\(dq | \(dqrpile\(dq | \(dqpile\(dq
|
||||||
pos : \*qover\*q | \*qsup\*q | \*qsub\*q | \*qto\*q | \*qfrom\*q
|
pos : \(dqover\(dq | \(dqsup\(dq | \(dqsub\(dq | \(dqto\(dq | \(dqfrom\(dq
|
||||||
mark : \*qdot\*q | \*qdotdot\*q | \*qhat\*q | \*qtilde\*q | \*qvec\*q
|
mark : \(dqdot\(dq | \(dqdotdot\(dq | \(dqhat\(dq | \(dqtilde\(dq | \(dqvec\(dq
|
||||||
| \*qdyad\*q | \*qbar\*q | \*qunder\*q
|
| \(dqdyad\(dq | \(dqbar\(dq | \(dqunder\(dq
|
||||||
font : \*qroman\*q | \*qitalic\*q | \*qbold\*q | \*qfat\*q
|
font : \(dqroman\(dq | \(dqitalic\(dq | \(dqbold\(dq | \(dqfat\(dq
|
||||||
list : eqn
|
list : eqn
|
||||||
| list \*qabove\*q eqn
|
| list \(dqabove\(dq eqn
|
||||||
space : [\e^~ \et]
|
space : [\e^~ \et]
|
||||||
.Ed
|
.Ed
|
||||||
.Pp
|
.Pp
|
||||||
@ -434,7 +434,7 @@ implementation (including GNU troff).
|
|||||||
.Bl -dash -compact
|
.Bl -dash -compact
|
||||||
.It
|
.It
|
||||||
The text string
|
The text string
|
||||||
.Sq \e\*q
|
.Sq \e\(dq
|
||||||
is interpreted as a literal quote in troff.
|
is interpreted as a literal quote in troff.
|
||||||
In mandoc, this is interpreted as a comment.
|
In mandoc, this is interpreted as a comment.
|
||||||
.It
|
.It
|
||||||
|
6
eqn.c
6
eqn.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: eqn.c,v 1.57 2015/01/28 21:11:53 schwarze Exp $ */
|
/* $Id: eqn.c,v 1.58 2015/03/04 12:19:49 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -194,6 +194,7 @@ enum eqn_symt {
|
|||||||
EQNSYM_equiv,
|
EQNSYM_equiv,
|
||||||
EQNSYM_lessequal,
|
EQNSYM_lessequal,
|
||||||
EQNSYM_moreequal,
|
EQNSYM_moreequal,
|
||||||
|
EQNSYM_minus,
|
||||||
EQNSYM__MAX
|
EQNSYM__MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -249,7 +250,7 @@ static const struct eqnsym eqnsyms[EQNSYM__MAX] = {
|
|||||||
{ "cdot", "pc" }, /* EQNSYM_cdot */
|
{ "cdot", "pc" }, /* EQNSYM_cdot */
|
||||||
{ "nothing", "&" }, /* EQNSYM_nothing */
|
{ "nothing", "&" }, /* EQNSYM_nothing */
|
||||||
{ "approx", "~~" }, /* EQNSYM_approx */
|
{ "approx", "~~" }, /* EQNSYM_approx */
|
||||||
{ "prime", "aq" }, /* EQNSYM_prime */
|
{ "prime", "fm" }, /* EQNSYM_prime */
|
||||||
{ "half", "12" }, /* EQNSYM_half */
|
{ "half", "12" }, /* EQNSYM_half */
|
||||||
{ "partial", "pd" }, /* EQNSYM_partial */
|
{ "partial", "pd" }, /* EQNSYM_partial */
|
||||||
{ "inf", "if" }, /* EQNSYM_inf */
|
{ "inf", "if" }, /* EQNSYM_inf */
|
||||||
@ -262,6 +263,7 @@ static const struct eqnsym eqnsyms[EQNSYM__MAX] = {
|
|||||||
{ "==", "==" }, /* EQNSYM_equiv */
|
{ "==", "==" }, /* EQNSYM_equiv */
|
||||||
{ "<=", "<=" }, /* EQNSYM_lessequal */
|
{ "<=", "<=" }, /* EQNSYM_lessequal */
|
||||||
{ ">=", ">=" }, /* EQNSYM_moreequal */
|
{ ">=", ">=" }, /* EQNSYM_moreequal */
|
||||||
|
{ "-", "mi" }, /* EQNSYM_minus */
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct eqn_box *eqn_box_alloc(struct eqn_node *, struct eqn_box *);
|
static struct eqn_box *eqn_box_alloc(struct eqn_node *, struct eqn_box *);
|
||||||
|
58
main.c
58
main.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: main.c,v 1.222 2015/02/27 16:02:10 schwarze Exp $ */
|
/* $Id: main.c,v 1.225 2015/03/10 13:50:03 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010-2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010-2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/param.h> /* MACHINE */
|
#include <sys/param.h> /* MACHINE */
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -101,7 +102,7 @@ static void mmsg(enum mandocerr, enum mandoclevel,
|
|||||||
static void parse(struct curparse *, int,
|
static void parse(struct curparse *, int,
|
||||||
const char *, enum mandoclevel *);
|
const char *, enum mandoclevel *);
|
||||||
static enum mandoclevel passthrough(const char *, int, int);
|
static enum mandoclevel passthrough(const char *, int, int);
|
||||||
static void spawn_pager(void);
|
static pid_t spawn_pager(void);
|
||||||
static int toptions(struct curparse *, char *);
|
static int toptions(struct curparse *, char *);
|
||||||
static void usage(enum argmode) __attribute__((noreturn));
|
static void usage(enum argmode) __attribute__((noreturn));
|
||||||
static int woptions(struct curparse *, char *);
|
static int woptions(struct curparse *, char *);
|
||||||
@ -130,9 +131,9 @@ main(int argc, char *argv[])
|
|||||||
enum outmode outmode;
|
enum outmode outmode;
|
||||||
int fd;
|
int fd;
|
||||||
int show_usage;
|
int show_usage;
|
||||||
int use_pager;
|
|
||||||
int options;
|
int options;
|
||||||
int c;
|
int c;
|
||||||
|
pid_t pager_pid; /* 0: don't use; 1: not yet spawned. */
|
||||||
|
|
||||||
if (argc < 1)
|
if (argc < 1)
|
||||||
progname = "mandoc";
|
progname = "mandoc";
|
||||||
@ -174,7 +175,7 @@ main(int argc, char *argv[])
|
|||||||
options = MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1;
|
options = MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1;
|
||||||
defos = NULL;
|
defos = NULL;
|
||||||
|
|
||||||
use_pager = 1;
|
pager_pid = 1;
|
||||||
show_usage = 0;
|
show_usage = 0;
|
||||||
synopsis_only = 0;
|
synopsis_only = 0;
|
||||||
outmode = OUTMODE_DEF;
|
outmode = OUTMODE_DEF;
|
||||||
@ -189,7 +190,7 @@ main(int argc, char *argv[])
|
|||||||
conf_file = optarg;
|
conf_file = optarg;
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
use_pager = 0;
|
pager_pid = 0;
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
search.argmode = ARG_WORD;
|
search.argmode = ARG_WORD;
|
||||||
@ -197,7 +198,7 @@ main(int argc, char *argv[])
|
|||||||
case 'h':
|
case 'h':
|
||||||
(void)strlcat(curp.outopts, "synopsis,", BUFSIZ);
|
(void)strlcat(curp.outopts, "synopsis,", BUFSIZ);
|
||||||
synopsis_only = 1;
|
synopsis_only = 1;
|
||||||
use_pager = 0;
|
pager_pid = 0;
|
||||||
outmode = OUTMODE_ALL;
|
outmode = OUTMODE_ALL;
|
||||||
break;
|
break;
|
||||||
case 'I':
|
case 'I':
|
||||||
@ -272,7 +273,7 @@ main(int argc, char *argv[])
|
|||||||
switch (search.argmode) {
|
switch (search.argmode) {
|
||||||
case ARG_FILE:
|
case ARG_FILE:
|
||||||
outmode = OUTMODE_ALL;
|
outmode = OUTMODE_ALL;
|
||||||
use_pager = 0;
|
pager_pid = 0;
|
||||||
break;
|
break;
|
||||||
case ARG_NAME:
|
case ARG_NAME:
|
||||||
outmode = OUTMODE_ONE;
|
outmode = OUTMODE_ONE;
|
||||||
@ -303,18 +304,20 @@ main(int argc, char *argv[])
|
|||||||
argc = 1;
|
argc = 1;
|
||||||
}
|
}
|
||||||
} else if (argc > 1 &&
|
} else if (argc > 1 &&
|
||||||
((uc = argv[0]) != NULL) &&
|
((uc = (unsigned char *)argv[0]) != NULL) &&
|
||||||
((isdigit(uc[0]) && (uc[1] == '\0' ||
|
((isdigit(uc[0]) && (uc[1] == '\0' ||
|
||||||
(isalpha(uc[1]) && uc[2] == '\0'))) ||
|
(isalpha(uc[1]) && uc[2] == '\0'))) ||
|
||||||
(uc[0] == 'n' && uc[1] == '\0'))) {
|
(uc[0] == 'n' && uc[1] == '\0'))) {
|
||||||
search.sec = uc;
|
search.sec = (char *)uc;
|
||||||
argv++;
|
argv++;
|
||||||
argc--;
|
argc--;
|
||||||
}
|
}
|
||||||
if (search.arch == NULL)
|
if (search.arch == NULL)
|
||||||
search.arch = getenv("MACHINE");
|
search.arch = getenv("MACHINE");
|
||||||
|
#ifdef MACHINE
|
||||||
if (search.arch == NULL)
|
if (search.arch == NULL)
|
||||||
search.arch = MACHINE;
|
search.arch = MACHINE;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = MANDOCLEVEL_OK;
|
rc = MANDOCLEVEL_OK;
|
||||||
@ -415,8 +418,8 @@ main(int argc, char *argv[])
|
|||||||
mparse_keep(curp.mp);
|
mparse_keep(curp.mp);
|
||||||
|
|
||||||
if (argc < 1) {
|
if (argc < 1) {
|
||||||
if (use_pager && isatty(STDOUT_FILENO))
|
if (pager_pid == 1 && isatty(STDOUT_FILENO))
|
||||||
spawn_pager();
|
pager_pid = spawn_pager();
|
||||||
parse(&curp, STDIN_FILENO, "<stdin>", &rc);
|
parse(&curp, STDIN_FILENO, "<stdin>", &rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -427,9 +430,8 @@ main(int argc, char *argv[])
|
|||||||
rc = rctmp;
|
rc = rctmp;
|
||||||
|
|
||||||
if (fd != -1) {
|
if (fd != -1) {
|
||||||
if (use_pager && isatty(STDOUT_FILENO))
|
if (pager_pid == 1 && isatty(STDOUT_FILENO))
|
||||||
spawn_pager();
|
pager_pid = spawn_pager();
|
||||||
use_pager = 0;
|
|
||||||
|
|
||||||
if (resp == NULL)
|
if (resp == NULL)
|
||||||
parse(&curp, fd, *argv, &rc);
|
parse(&curp, fd, *argv, &rc);
|
||||||
@ -479,6 +481,17 @@ out:
|
|||||||
|
|
||||||
free(defos);
|
free(defos);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If a pager is attached, flush the pipe leading to it
|
||||||
|
* and signal end of file such that the user can browse
|
||||||
|
* to the end. Then wait for the user to close the pager.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (pager_pid != 0 && pager_pid != 1) {
|
||||||
|
fclose(stdout);
|
||||||
|
waitpid(pager_pid, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
return((int)rc);
|
return((int)rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -927,7 +940,7 @@ mmsg(enum mandocerr t, enum mandoclevel lvl,
|
|||||||
fputc('\n', stderr);
|
fputc('\n', stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static pid_t
|
||||||
spawn_pager(void)
|
spawn_pager(void)
|
||||||
{
|
{
|
||||||
#define MAX_PAGER_ARGS 16
|
#define MAX_PAGER_ARGS 16
|
||||||
@ -936,31 +949,33 @@ spawn_pager(void)
|
|||||||
char *cp;
|
char *cp;
|
||||||
int fildes[2];
|
int fildes[2];
|
||||||
int argc;
|
int argc;
|
||||||
|
pid_t pager_pid;
|
||||||
|
|
||||||
if (pipe(fildes) == -1) {
|
if (pipe(fildes) == -1) {
|
||||||
fprintf(stderr, "%s: pipe: %s\n",
|
fprintf(stderr, "%s: pipe: %s\n",
|
||||||
progname, strerror(errno));
|
progname, strerror(errno));
|
||||||
return;
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (fork()) {
|
switch (pager_pid = fork()) {
|
||||||
case -1:
|
case -1:
|
||||||
fprintf(stderr, "%s: fork: %s\n",
|
fprintf(stderr, "%s: fork: %s\n",
|
||||||
progname, strerror(errno));
|
progname, strerror(errno));
|
||||||
exit((int)MANDOCLEVEL_SYSERR);
|
exit((int)MANDOCLEVEL_SYSERR);
|
||||||
case 0:
|
case 0:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
close(fildes[0]);
|
close(fildes[0]);
|
||||||
if (dup2(fildes[1], STDOUT_FILENO) == -1) {
|
if (dup2(fildes[1], STDOUT_FILENO) == -1) {
|
||||||
fprintf(stderr, "%s: dup output: %s\n",
|
fprintf(stderr, "%s: dup output: %s\n",
|
||||||
progname, strerror(errno));
|
progname, strerror(errno));
|
||||||
exit((int)MANDOCLEVEL_SYSERR);
|
exit((int)MANDOCLEVEL_SYSERR);
|
||||||
}
|
}
|
||||||
return;
|
close(fildes[1]);
|
||||||
default:
|
return(pager_pid);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The original process becomes the pager. */
|
/* The child process becomes the pager. */
|
||||||
|
|
||||||
close(fildes[1]);
|
close(fildes[1]);
|
||||||
if (dup2(fildes[0], STDIN_FILENO) == -1) {
|
if (dup2(fildes[0], STDIN_FILENO) == -1) {
|
||||||
@ -968,6 +983,7 @@ spawn_pager(void)
|
|||||||
progname, strerror(errno));
|
progname, strerror(errno));
|
||||||
exit((int)MANDOCLEVEL_SYSERR);
|
exit((int)MANDOCLEVEL_SYSERR);
|
||||||
}
|
}
|
||||||
|
close(fildes[0]);
|
||||||
|
|
||||||
pager = getenv("MANPAGER");
|
pager = getenv("MANPAGER");
|
||||||
if (pager == NULL || *pager == '\0')
|
if (pager == NULL || *pager == '\0')
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: man_html.c,v 1.111 2015/02/10 08:05:30 schwarze Exp $ */
|
/* $Id: man_html.c,v 1.112 2015/03/03 21:11:34 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -223,6 +223,8 @@ print_man_node(MAN_ARGS)
|
|||||||
print_text(h, n->string);
|
print_text(h, n->string);
|
||||||
return;
|
return;
|
||||||
case MAN_EQN:
|
case MAN_EQN:
|
||||||
|
if (n->flags & MAN_LINE)
|
||||||
|
putchar('\n');
|
||||||
print_eqn(h, n->eqn);
|
print_eqn(h, n->eqn);
|
||||||
break;
|
break;
|
||||||
case MAN_TBL:
|
case MAN_TBL:
|
||||||
|
10
man_term.c
10
man_term.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: man_term.c,v 1.168 2015/01/30 22:04:44 schwarze Exp $ */
|
/* $Id: man_term.c,v 1.169 2015/03/06 15:48:52 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -945,12 +945,8 @@ print_man_node(DECL_ARGS)
|
|||||||
p->flags |= TERMP_NOSPACE;
|
p->flags |= TERMP_NOSPACE;
|
||||||
return;
|
return;
|
||||||
case MAN_TBL:
|
case MAN_TBL:
|
||||||
/*
|
if (p->tbl.cols == NULL)
|
||||||
* Tables are preceded by a newline. Then process a
|
term_vspace(p);
|
||||||
* table line, which will cause line termination,
|
|
||||||
*/
|
|
||||||
if (n->span->prev == NULL)
|
|
||||||
term_newln(p);
|
|
||||||
term_tbl(p, n->span);
|
term_tbl(p, n->span);
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: mandocdb.c,v 1.185 2015/02/27 16:22:09 schwarze Exp $ */
|
/* $Id: mandocdb.c,v 1.186 2015/03/13 00:19:41 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -942,6 +942,7 @@ mlink_add(struct mlink *mlink, const struct stat *st)
|
|||||||
assert(NULL == ohash_find(&mlinks, slot));
|
assert(NULL == ohash_find(&mlinks, slot));
|
||||||
ohash_insert(&mlinks, slot, mlink);
|
ohash_insert(&mlinks, slot, mlink);
|
||||||
|
|
||||||
|
memset(&inodev, 0, sizeof(inodev)); /* Clear padding. */
|
||||||
inodev.st_ino = st->st_ino;
|
inodev.st_ino = st->st_ino;
|
||||||
inodev.st_dev = st->st_dev;
|
inodev.st_dev = st->st_dev;
|
||||||
slot = ohash_lookup_memory(&mpages, (char *)&inodev,
|
slot = ohash_lookup_memory(&mpages, (char *)&inodev,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: mansearch.c,v 1.54 2015/02/27 16:02:10 schwarze Exp $ */
|
/* $Id: mansearch.c,v 1.55 2015/03/11 13:11:22 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -195,8 +195,8 @@ mansearch(const struct mansearch *search,
|
|||||||
if (NULL == (e = exprcomp(search, argc, argv)))
|
if (NULL == (e = exprcomp(search, argc, argv)))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
outbit = 0;
|
|
||||||
if (NULL != search->outkey) {
|
if (NULL != search->outkey) {
|
||||||
|
outbit = TYPE_Nd;
|
||||||
for (indexbit = 0, iterbit = 1;
|
for (indexbit = 0, iterbit = 1;
|
||||||
indexbit < mansearch_keymax;
|
indexbit < mansearch_keymax;
|
||||||
indexbit++, iterbit <<= 1) {
|
indexbit++, iterbit <<= 1) {
|
||||||
@ -206,7 +206,8 @@ mansearch(const struct mansearch *search,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
|
outbit = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Save a descriptor to the current working directory.
|
* Save a descriptor to the current working directory.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: mdoc_html.c,v 1.225 2015/02/12 12:24:33 schwarze Exp $ */
|
/* $Id: mdoc_html.c,v 1.226 2015/03/03 21:11:34 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -411,6 +411,8 @@ print_mdoc_node(MDOC_ARGS)
|
|||||||
h->flags |= HTML_NOSPACE;
|
h->flags |= HTML_NOSPACE;
|
||||||
return;
|
return;
|
||||||
case MDOC_EQN:
|
case MDOC_EQN:
|
||||||
|
if (n->flags & MDOC_LINE)
|
||||||
|
putchar('\n');
|
||||||
print_eqn(h, n->eqn);
|
print_eqn(h, n->eqn);
|
||||||
break;
|
break;
|
||||||
case MDOC_TBL:
|
case MDOC_TBL:
|
||||||
|
13
mdoc_term.c
13
mdoc_term.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: mdoc_term.c,v 1.311 2015/02/17 20:37:17 schwarze Exp $ */
|
/* $Id: mdoc_term.c,v 1.313 2015/03/06 15:48:52 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -348,6 +348,8 @@ print_mdoc_node(DECL_ARGS)
|
|||||||
p->flags |= TERMP_NOSPACE;
|
p->flags |= TERMP_NOSPACE;
|
||||||
break;
|
break;
|
||||||
case MDOC_TBL:
|
case MDOC_TBL:
|
||||||
|
if (p->tbl.cols == NULL)
|
||||||
|
term_newln(p);
|
||||||
term_tbl(p, n->span);
|
term_tbl(p, n->span);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1808,7 +1810,7 @@ static int
|
|||||||
termp_sp_pre(DECL_ARGS)
|
termp_sp_pre(DECL_ARGS)
|
||||||
{
|
{
|
||||||
struct roffsu su;
|
struct roffsu su;
|
||||||
size_t i, len;
|
int i, len;
|
||||||
|
|
||||||
switch (n->tok) {
|
switch (n->tok) {
|
||||||
case MDOC_sp:
|
case MDOC_sp:
|
||||||
@ -1829,8 +1831,11 @@ termp_sp_pre(DECL_ARGS)
|
|||||||
|
|
||||||
if (0 == len)
|
if (0 == len)
|
||||||
term_newln(p);
|
term_newln(p);
|
||||||
for (i = 0; i < len; i++)
|
else if (len < 0)
|
||||||
term_vspace(p);
|
p->skipvsp -= len;
|
||||||
|
else
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
term_vspace(p);
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: preconv.c,v 1.13 2014/12/19 04:58:35 schwarze Exp $ */
|
/* $Id: preconv.c,v 1.14 2015/03/06 09:24:59 kristaps Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -33,7 +33,7 @@ preconv_encode(struct buf *ib, size_t *ii, struct buf *ob, size_t *oi,
|
|||||||
int nby;
|
int nby;
|
||||||
unsigned int accum;
|
unsigned int accum;
|
||||||
|
|
||||||
cu = ib->buf + *ii;
|
cu = (unsigned char *)ib->buf + *ii;
|
||||||
assert(*cu & 0x80);
|
assert(*cu & 0x80);
|
||||||
|
|
||||||
if ( ! (*filenc & MPARSE_UTF8))
|
if ( ! (*filenc & MPARSE_UTF8))
|
||||||
|
4
read.c
4
read.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: read.c,v 1.129 2015/03/02 14:50:17 schwarze Exp $ */
|
/* $Id: read.c,v 1.131 2015/03/11 13:05:20 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -636,7 +636,7 @@ read_whole_file(struct mparse *curp, const char *file, int fd,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (S_ISREG(st.st_mode)) {
|
if (S_ISREG(st.st_mode)) {
|
||||||
if (st.st_size >= (1U << 31)) {
|
if (st.st_size > 0x7fffffff) {
|
||||||
mandoc_msg(MANDOCERR_TOOLARGE, curp, 0, 0, NULL);
|
mandoc_msg(MANDOCERR_TOOLARGE, curp, 0, 0, NULL);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: tbl_term.c,v 1.38 2015/01/31 00:12:41 schwarze Exp $ */
|
/* $Id: tbl_term.c,v 1.40 2015/03/06 15:48:53 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2011, 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2011, 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -82,8 +82,6 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (tp->tbl.cols == NULL) {
|
if (tp->tbl.cols == NULL) {
|
||||||
term_flushln(tp);
|
|
||||||
|
|
||||||
tp->tbl.len = term_tbl_len;
|
tp->tbl.len = term_tbl_len;
|
||||||
tp->tbl.slen = term_tbl_strlen;
|
tp->tbl.slen = term_tbl_strlen;
|
||||||
tp->tbl.arg = tp;
|
tp->tbl.arg = tp;
|
||||||
|
3
term.c
3
term.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: term.c,v 1.244 2015/01/31 00:12:41 schwarze Exp $ */
|
/* $Id: term.c,v 1.245 2015/03/06 13:02:43 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -413,6 +413,7 @@ term_word(struct termp *p, const char *word)
|
|||||||
p->flags |= TERMP_NOSPACE;
|
p->flags |= TERMP_NOSPACE;
|
||||||
|
|
||||||
p->flags &= ~(TERMP_SENTENCE | TERMP_NONEWLINE);
|
p->flags &= ~(TERMP_SENTENCE | TERMP_NONEWLINE);
|
||||||
|
p->skipvsp = 0;
|
||||||
|
|
||||||
while ('\0' != *word) {
|
while ('\0' != *word) {
|
||||||
if ('\\' != *word) {
|
if ('\\' != *word) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user