svn commit: r351390 - stable/12/contrib/mandoc
Baptiste Daroussin
bapt at FreeBSD.org
Thu Aug 22 11:32:06 UTC 2019
Author: bapt
Date: Thu Aug 22 11:32:03 2019
New Revision: 351390
URL: https://svnweb.freebsd.org/changeset/base/351390
Log:
MFC r350351:
Update mandoc to cvs snapshot 2019-07-23
This snapshot among other things includes a fix for a crash of mandoc with empty
tbl reported by rea@ (his regression test has been incorporated upstream)
Deleted:
stable/12/contrib/mandoc/libroff.h
Modified:
stable/12/contrib/mandoc/Makefile.depend
stable/12/contrib/mandoc/TODO
stable/12/contrib/mandoc/arch.c
stable/12/contrib/mandoc/cgi.c
stable/12/contrib/mandoc/configure
stable/12/contrib/mandoc/dbm.c
stable/12/contrib/mandoc/dbm_map.h
stable/12/contrib/mandoc/eqn.7
stable/12/contrib/mandoc/eqn_html.c
stable/12/contrib/mandoc/html.c
stable/12/contrib/mandoc/html.h
stable/12/contrib/mandoc/lib.in
stable/12/contrib/mandoc/main.c
stable/12/contrib/mandoc/man.7
stable/12/contrib/mandoc/man_html.c
stable/12/contrib/mandoc/man_term.c
stable/12/contrib/mandoc/man_validate.c
stable/12/contrib/mandoc/mandoc.1
stable/12/contrib/mandoc/mandoc.c
stable/12/contrib/mandoc/mandoc.css
stable/12/contrib/mandoc/mandoc.h
stable/12/contrib/mandoc/mandoc_char.7
stable/12/contrib/mandoc/mandoc_headers.3
stable/12/contrib/mandoc/mandoc_msg.c
stable/12/contrib/mandoc/mandocdb.c
stable/12/contrib/mandoc/manpath.c
stable/12/contrib/mandoc/mansearch.c
stable/12/contrib/mandoc/mansearch.h
stable/12/contrib/mandoc/mdoc.7
stable/12/contrib/mandoc/mdoc_argv.c
stable/12/contrib/mandoc/mdoc_markdown.c
stable/12/contrib/mandoc/mdoc_term.c
stable/12/contrib/mandoc/mdoc_validate.c
stable/12/contrib/mandoc/out.c
stable/12/contrib/mandoc/read.c
stable/12/contrib/mandoc/roff.7
stable/12/contrib/mandoc/roff.c
stable/12/contrib/mandoc/roff_html.c
stable/12/contrib/mandoc/tag.c
stable/12/contrib/mandoc/tbl_html.c
stable/12/contrib/mandoc/tbl_term.c
stable/12/contrib/mandoc/term.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/contrib/mandoc/Makefile.depend
==============================================================================
--- stable/12/contrib/mandoc/Makefile.depend Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/Makefile.depend Thu Aug 22 11:32:03 2019 (r351390)
@@ -29,7 +29,7 @@ dbm.o: dbm.c config.h mansearch.h dbm_map.h dbm.h
dbm_map.o: dbm_map.c config.h mansearch.h dbm_map.h dbm.h
demandoc.o: demandoc.c config.h mandoc.h roff.h man.h mdoc.h mandoc_parse.h
eqn.o: eqn.c config.h mandoc_aux.h mandoc.h roff.h eqn.h libmandoc.h eqn_parse.h
-eqn_html.o: eqn_html.c config.h mandoc.h eqn.h out.h html.h
+eqn_html.o: eqn_html.c config.h mandoc.h roff.h eqn.h out.h html.h
eqn_term.o: eqn_term.c config.h eqn.h out.h term.h
html.o: html.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h roff.h out.h html.h manconf.h main.h
lib.o: lib.c config.h roff.h libmdoc.h lib.in
@@ -37,16 +37,16 @@ main.o: main.c config.h mandoc_aux.h mandoc.h mandoc_x
man.o: man.c config.h mandoc_aux.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h
man_html.o: man_html.c config.h mandoc_aux.h mandoc.h roff.h man.h out.h html.h main.h
man_macro.o: man_macro.c config.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h
-man_term.o: man_term.c config.h mandoc_aux.h roff.h man.h out.h term.h main.h
+man_term.o: man_term.c config.h mandoc_aux.h mandoc.h roff.h man.h out.h term.h tag.h main.h
man_validate.o: man_validate.c config.h mandoc_aux.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h
mandoc.o: mandoc.c config.h mandoc_aux.h mandoc.h roff.h libmandoc.h roff_int.h
mandoc_aux.o: mandoc_aux.c config.h mandoc.h mandoc_aux.h
-mandoc_msg.o: mandoc_msg.c mandoc.h
+mandoc_msg.o: mandoc_msg.c config.h mandoc.h
mandoc_ohash.o: mandoc_ohash.c mandoc_aux.h mandoc_ohash.h compat_ohash.h
mandoc_xr.o: mandoc_xr.c mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc_xr.h
mandocd.o: mandocd.c config.h mandoc.h roff.h mdoc.h man.h mandoc_parse.h main.h manconf.h
mandocdb.o: mandocdb.c config.h compat_fts.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h roff.h mdoc.h man.h mandoc_parse.h manconf.h mansearch.h dba_array.h dba.h
-manpath.o: manpath.c config.h mandoc_aux.h manconf.h
+manpath.o: manpath.c config.h mandoc_aux.h mandoc.h manconf.h
mansearch.o: mansearch.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h manconf.h mansearch.h dbm.h
mdoc.o: mdoc.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h libmandoc.h roff_int.h libmdoc.h
mdoc_argv.o: mdoc_argv.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h libmandoc.h roff_int.h libmdoc.h
@@ -67,10 +67,10 @@ roff_term.o: roff_term.c mandoc.h roff.h out.h term.h
roff_validate.o: roff_validate.c mandoc.h roff.h libmandoc.h roff_int.h
soelim.o: soelim.c config.h compat_stringlist.h
st.o: st.c config.h mandoc.h roff.h libmdoc.h
-tag.o: tag.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h tag.h
+tag.o: tag.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h tag.h
tbl.o: tbl.c config.h mandoc_aux.h mandoc.h tbl.h libmandoc.h tbl_parse.h tbl_int.h
tbl_data.o: tbl_data.c config.h mandoc_aux.h mandoc.h tbl.h libmandoc.h tbl_int.h
-tbl_html.o: tbl_html.c config.h mandoc.h tbl.h out.h html.h
+tbl_html.o: tbl_html.c config.h mandoc.h roff.h tbl.h out.h html.h
tbl_layout.o: tbl_layout.c config.h mandoc_aux.h mandoc.h tbl.h libmandoc.h tbl_int.h
tbl_opts.o: tbl_opts.c config.h mandoc.h tbl.h libmandoc.h tbl_int.h
tbl_term.o: tbl_term.c config.h mandoc.h tbl.h out.h term.h
Modified: stable/12/contrib/mandoc/TODO
==============================================================================
--- stable/12/contrib/mandoc/TODO Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/TODO Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,6 +1,6 @@
************************************************************************
* Official mandoc TODO.
-* $Id: TODO,v 1.289 2019/03/04 13:01:57 schwarze Exp $
+* $Id: TODO,v 1.295 2019/06/11 16:04:36 schwarze Exp $
************************************************************************
Many issues are annotated for difficulty as follows:
@@ -62,6 +62,27 @@ are mere guesses, and some may be wrong.
needed for Tcl_NewStringObj(3) via wiz@ Wed, 5 Mar 2014 22:27:43 +0100
loc ** exist *** algo *** size * imp ***
+- .als only works for macros in mandoc, not for user-defined strings.
+ Also, the "val" field in struct roffkv would have to be replaced
+ with a pointer to a reference-counted wrapper, and an alias
+ would have to point to the same wrapper as the original.
+ .als to undefined does nothing; the alias is not created.
+ .rm'ing the original leaves the alias to point to the old value.
+ .de .als .de changes both, but
+ .de .als .rm .de only changes the new value, not the alias.
+ Found in groffer(1) version 1.19
+ Jan Stary 20 Apr 2019 20:16:54 +0200
+ loc * exist ** algo ** size ** imp *
+
+- roff string condition comparisons fail when vars contain quotes:
+ .ds s '
+ .if '\*s'' \&...
+ hard to fix because of the basic architecture (string replacement
+ happens before roff(7) syntax parsing)
+ Found in groffer(1) version 1.19
+ Jan Stary 20 Apr 2019 20:16:54 +0200
+ loc * exist *** algo *** size ** imp *
+
--- missing mdoc features ----------------------------------------------
- .Bl -column .Xo support is missing
@@ -263,6 +284,9 @@ are mere guesses, and some may be wrong.
http://ikiwiki.info/plugins/contrib/mandoc/
https://github.com/schmonz/ikiwiki/compare/mandoc
Amitai Schlair Mon, 19 May 2014 14:05:53 -0400
+
+- check compatibility with
+ https://git.sr.ht/~sircmpwn/scdoc
- check features of the Slackware man.conf(5) format
Carsten Kunze Wed, 11 Mar 2015 17:57:24 +0100
Modified: stable/12/contrib/mandoc/arch.c
==============================================================================
--- stable/12/contrib/mandoc/arch.c Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/arch.c Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-/* $Id: arch.c,v 1.14 2019/03/04 13:01:57 schwarze Exp $ */
+/* $Id: arch.c,v 1.15 2019/05/21 07:52:00 schwarze Exp $ */
/*
* Copyright (c) 2017, 2019 Ingo Schwarze <schwarze at openbsd.org>
*
@@ -26,7 +26,7 @@ arch_valid(const char *arch, enum mandoc_os os)
const char *openbsd_arch[] = {
"alpha", "amd64", "arm64", "armv7", "hppa", "i386",
"landisk", "loongson", "luna88k", "macppc", "mips64",
- "octeon", "sgi", "socppc", "sparc64", NULL
+ "octeon", "sgi", "sparc64", NULL
};
const char *netbsd_arch[] = {
"acorn26", "acorn32", "algor", "alpha", "amiga",
Modified: stable/12/contrib/mandoc/cgi.c
==============================================================================
--- stable/12/contrib/mandoc/cgi.c Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/cgi.c Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-/* $Id: cgi.c,v 1.166 2019/03/06 12:32:41 schwarze Exp $ */
+/* $Id: cgi.c,v 1.167 2019/07/10 12:49:20 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps at bsd.lv>
* Copyright (c) 2014, 2015, 2016, 2017, 2018 Ingo Schwarze <schwarze at usta.de>
@@ -869,7 +869,6 @@ resp_format(const struct req *req, const char *file)
memset(&conf, 0, sizeof(conf));
conf.fragment = 1;
conf.style = mandoc_strdup(CSS_DIR "/mandoc.css");
- conf.toc = 1;
usepath = strcmp(req->q.manpath, req->p[0]);
mandoc_asprintf(&conf.man, "/%s%s%s%s%%N.%%S",
scriptname, *scriptname == '\0' ? "" : "/",
Modified: stable/12/contrib/mandoc/configure
==============================================================================
--- stable/12/contrib/mandoc/configure Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/configure Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $Id: configure,v 1.70 2019/03/06 16:04:31 schwarze Exp $
+# $Id: configure,v 1.71 2019/07/01 22:56:24 schwarze Exp $
#
# Copyright (c) 2014-2019 Ingo Schwarze <schwarze at openbsd.org>
#
@@ -529,7 +529,7 @@ fi
echo "extern char *mkdtemp(char *);"
if [ ${HAVE_PROGNAME} -eq 0 ]; then
- echo "extern const char *getprogname(void);"
+ echo "extern const char *getprogname(void);"
echo "extern void setprogname(const char *);"
fi
Modified: stable/12/contrib/mandoc/dbm.c
==============================================================================
--- stable/12/contrib/mandoc/dbm.c Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/dbm.c Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-/* $Id: dbm.c,v 1.6 2018/11/19 19:22:07 schwarze Exp $ */
+/* $Id: dbm.c,v 1.7 2019/07/01 22:56:24 schwarze Exp $ */
/*
* Copyright (c) 2016 Ingo Schwarze <schwarze at openbsd.org>
*
@@ -233,7 +233,7 @@ static struct dbm_res
page_bytitle(enum iter arg_iter, const struct dbm_match *arg_match)
{
static const struct dbm_match *match;
- static const char *cp;
+ static const char *cp;
static int32_t ip;
struct dbm_res res = {-1, 0};
@@ -315,7 +315,7 @@ page_byarch(const struct dbm_match *arg_match)
static const struct dbm_match *match;
struct dbm_res res = {-1, 0};
static int32_t ip;
- const char *cp;
+ const char *cp;
/* Initialize for a new iteration. */
Modified: stable/12/contrib/mandoc/dbm_map.h
==============================================================================
--- stable/12/contrib/mandoc/dbm_map.h Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/dbm_map.h Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-/* $Id: dbm_map.h,v 1.1 2016/07/19 21:31:55 schwarze Exp $ */
+/* $Id: dbm_map.h,v 1.2 2019/07/01 22:56:24 schwarze Exp $ */
/*
* Copyright (c) 2016 Ingo Schwarze <schwarze at openbsd.org>
*
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * Private interface for low-level routines for the map-based version
+ * Private interface for low-level routines for the map-based version
* of the mandoc database, for read-only access.
* To be used by dbm*.c only.
*/
Modified: stable/12/contrib/mandoc/eqn.7
==============================================================================
--- stable/12/contrib/mandoc/eqn.7 Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/eqn.7 Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-.\" $Id: eqn.7,v 1.37 2017/09/04 10:35:27 schwarze Exp $
+.\" $Id: eqn.7,v 1.38 2019/04/23 17:57:49 schwarze Exp $
.\"
.\" Copyright (c) 2011 Kristaps Dzonsons <kristaps at bsd.lv>
.\" Copyright (c) 2014 Ingo Schwarze <schwarze at openbsd.org>
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: September 4 2017 $
+.Dd $Mdocdate: April 23 2019 $
.Dt EQN 7
.Os
.Sh NAME
@@ -470,7 +470,7 @@ commands are also ignored.
.%T System for Typesetting Mathematics
.%J Communications of the ACM
.%V 18
-.%P 151\(en157
+.%P pp. 151\(en157
.%D March, 1975
.Re
.Rs
Modified: stable/12/contrib/mandoc/eqn_html.c
==============================================================================
--- stable/12/contrib/mandoc/eqn_html.c Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/eqn_html.c Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-/* $Id: eqn_html.c,v 1.18 2018/12/13 05:23:38 schwarze Exp $ */
+/* $Id: eqn_html.c,v 1.19 2019/03/17 18:21:45 schwarze Exp $ */
/*
* Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps at bsd.lv>
* Copyright (c) 2017 Ingo Schwarze <schwarze at openbsd.org>
@@ -26,6 +26,7 @@
#include <string.h>
#include "mandoc.h"
+#include "roff.h"
#include "eqn.h"
#include "out.h"
#include "html.h"
Modified: stable/12/contrib/mandoc/html.c
==============================================================================
--- stable/12/contrib/mandoc/html.c Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/html.c Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.254 2019/03/03 13:02:11 schwarze Exp $ */
+/* $Id: html.c,v 1.255 2019/04/30 15:53:00 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps at bsd.lv>
* Copyright (c) 2011-2015, 2017-2019 Ingo Schwarze <schwarze at openbsd.org>
@@ -120,6 +120,7 @@ static void print_ctag(struct html *, struct tag *);
static int print_escape(struct html *, char);
static int print_encode(struct html *, const char *, const char *, int);
static void print_href(struct html *, const char *, const char *, int);
+static void print_metaf(struct html *);
void *
@@ -222,55 +223,49 @@ print_gen_head(struct html *h)
print_tagq(h, t);
}
-void
-print_metaf(struct html *h, enum mandoc_esc deco)
+int
+html_setfont(struct html *h, enum mandoc_esc font)
{
- enum htmlfont font;
-
- switch (deco) {
+ switch (font) {
case ESCAPE_FONTPREV:
font = h->metal;
break;
case ESCAPE_FONTITALIC:
- font = HTMLFONT_ITALIC;
- break;
case ESCAPE_FONTBOLD:
- font = HTMLFONT_BOLD;
- break;
case ESCAPE_FONTBI:
- font = HTMLFONT_BI;
- break;
case ESCAPE_FONTCW:
- font = HTMLFONT_CW;
+ case ESCAPE_FONTROMAN:
break;
case ESCAPE_FONT:
- case ESCAPE_FONTROMAN:
- font = HTMLFONT_NONE;
+ font = ESCAPE_FONTROMAN;
break;
default:
- return;
+ return 0;
}
+ h->metal = h->metac;
+ h->metac = font;
+ return 1;
+}
+static void
+print_metaf(struct html *h)
+{
if (h->metaf) {
print_tagq(h, h->metaf);
h->metaf = NULL;
}
-
- h->metal = h->metac;
- h->metac = font;
-
- switch (font) {
- case HTMLFONT_ITALIC:
+ switch (h->metac) {
+ case ESCAPE_FONTITALIC:
h->metaf = print_otag(h, TAG_I, "");
break;
- case HTMLFONT_BOLD:
+ case ESCAPE_FONTBOLD:
h->metaf = print_otag(h, TAG_B, "");
break;
- case HTMLFONT_BI:
+ case ESCAPE_FONTBI:
h->metaf = print_otag(h, TAG_B, "");
print_otag(h, TAG_I, "");
break;
- case HTMLFONT_CW:
+ case ESCAPE_FONTCW:
h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
break;
default:
@@ -479,7 +474,8 @@ print_encode(struct html *h, const char *p, const char
case ESCAPE_FONTROMAN:
if (0 == norecurse) {
h->flags |= HTML_NOSPACE;
- print_metaf(h, esc);
+ if (html_setfont(h, esc))
+ print_metaf(h);
h->flags &= ~HTML_NOSPACE;
}
continue;
@@ -806,27 +802,9 @@ print_text(struct html *h, const char *word)
print_word(h, " ");
}
- assert(NULL == h->metaf);
- switch (h->metac) {
- case HTMLFONT_ITALIC:
- h->metaf = print_otag(h, TAG_I, "");
- break;
- case HTMLFONT_BOLD:
- h->metaf = print_otag(h, TAG_B, "");
- break;
- case HTMLFONT_BI:
- h->metaf = print_otag(h, TAG_B, "");
- print_otag(h, TAG_I, "");
- break;
- case HTMLFONT_CW:
- h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
- break;
- default:
- print_indent(h);
- break;
- }
-
- assert(word);
+ assert(h->metaf == NULL);
+ print_metaf(h);
+ print_indent(h);
if ( ! print_encode(h, word, NULL, 0)) {
if ( ! (h->flags & HTML_NONOSPACE))
h->flags &= ~HTML_NOSPACE;
@@ -834,7 +812,7 @@ print_text(struct html *h, const char *word)
} else
h->flags |= HTML_NOSPACE | HTML_NONEWLINE;
- if (h->metaf) {
+ if (h->metaf != NULL) {
print_tagq(h, h->metaf);
h->metaf = NULL;
}
Modified: stable/12/contrib/mandoc/html.h
==============================================================================
--- stable/12/contrib/mandoc/html.h Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/html.h Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-/* $Id: html.h,v 1.102 2019/03/01 10:57:18 schwarze Exp $ */
+/* $Id: html.h,v 1.103 2019/04/30 15:53:00 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps at bsd.lv>
* Copyright (c) 2017, 2018, 2019 Ingo Schwarze <schwarze at openbsd.org>
@@ -69,15 +69,6 @@ enum htmltag {
TAG_MAX
};
-enum htmlfont {
- HTMLFONT_NONE = 0,
- HTMLFONT_BOLD,
- HTMLFONT_ITALIC,
- HTMLFONT_BI,
- HTMLFONT_CW,
- HTMLFONT_MAX
-};
-
struct tag {
struct tag *next;
int refcnt;
@@ -111,8 +102,8 @@ struct html {
char *base_includes; /* base for include href */
char *style; /* style-sheet URI */
struct tag *metaf; /* current open font scope */
- enum htmlfont metal; /* last used font */
- enum htmlfont metac; /* current font mode */
+ enum mandoc_esc metal; /* last used font */
+ enum mandoc_esc metac; /* current font mode */
int oflags; /* output options */
#define HTML_FRAGMENT (1 << 0) /* don't emit HTML/HEAD/BODY */
#define HTML_TOC (1 << 1) /* emit a table of contents */
@@ -128,7 +119,6 @@ void roff_html_pre(struct html *, const struct roff
void print_gen_comment(struct html *, struct roff_node *);
void print_gen_decls(struct html *);
void print_gen_head(struct html *);
-void print_metaf(struct html *, enum mandoc_esc);
struct tag *print_otag(struct html *, enum htmltag, const char *, ...);
void print_tagq(struct html *, const struct tag *);
void print_stagq(struct html *, const struct tag *);
@@ -141,3 +131,4 @@ void print_endline(struct html *);
void html_close_paragraph(struct html *);
enum roff_tok html_fillmode(struct html *, enum roff_tok);
char *html_make_id(const struct roff_node *, int);
+int html_setfont(struct html *, enum mandoc_esc);
Modified: stable/12/contrib/mandoc/lib.in
==============================================================================
--- stable/12/contrib/mandoc/lib.in Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/lib.in Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-/* $Id: lib.in,v 1.21 2019/03/04 17:35:21 schwarze Exp $ */
+/* $Id: lib.in,v 1.22 2019/07/01 22:56:24 schwarze Exp $ */
/*
* Copyright (c) 2009 Kristaps Dzonsons <kristaps at bsd.lv>
* Copyright (c) 2009, 2012 Joerg Sonnenberger <joerg at netbsd.org>
@@ -43,7 +43,7 @@ LINE("libcipher", "FreeSec Crypt Library (libcipher, \
LINE("libcompat", "Compatibility Library (libcompat, \\-lcompat)")
LINE("libcrypt", "Crypt Library (libcrypt, \\-lcrypt)")
LINE("libcurses", "Curses Library (libcurses, \\-lcurses)")
-LINE("libcuse", "Userland Character Device Library (libcuse, \\-lcuse)")
+LINE("libcuse", "Userland Character Device Library (libcuse, \\-lcuse)")
LINE("libdevattr", "Device attribute and event library (libdevattr, \\-ldevattr)")
LINE("libdevctl", "Device Control Library (libdevctl, \\-ldevctl)")
LINE("libdevinfo", "Device and Resource Information Utility Library (libdevinfo, \\-ldevinfo)")
Modified: stable/12/contrib/mandoc/main.c
==============================================================================
--- stable/12/contrib/mandoc/main.c Thu Aug 22 10:21:07 2019 (r351389)
+++ stable/12/contrib/mandoc/main.c Thu Aug 22 11:32:03 2019 (r351390)
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.322 2019/03/06 10:18:58 schwarze Exp $ */
+/* $Id: main.c,v 1.332 2019/07/19 20:27:25 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps at bsd.lv>
* Copyright (c) 2010-2012, 2014-2019 Ingo Schwarze <schwarze at openbsd.org>
@@ -21,6 +21,7 @@
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/param.h> /* MACHINE */
+#include <sys/stat.h>
#include <sys/wait.h>
#include <assert.h>
@@ -97,13 +98,10 @@ static int fs_lookup(const struct manpaths *,
static int fs_search(const struct mansearch *,
const struct manpaths *, int, char**,
struct manpage **, size_t *);
-static int koptions(int *, char *);
-static void moptions(int *, char *);
static void outdata_alloc(struct curparse *);
static void parse(struct curparse *, int, const char *);
-static void passthrough(const char *, int, int);
+static void passthrough(int, int);
static pid_t spawn_pager(struct tag_files *);
-static int toptions(struct curparse *, char *);
static void usage(enum argmode) __attribute__((__noreturn__));
static int woptions(struct curparse *, char *);
@@ -125,7 +123,7 @@ main(int argc, char *argv[])
char *conf_file, *defpaths, *auxpaths;
char *oarg, *tagarg;
unsigned char *uc;
- size_t i, sz;
+ size_t i, sz, ssz;
int prio, best_prio;
enum outmode outmode;
int fd, startdir;
@@ -154,10 +152,11 @@ main(int argc, char *argv[])
return mandocdb(argc, argv);
#if HAVE_PLEDGE
- if (pledge("stdio rpath tmppath tty proc exec", NULL) == -1)
- err((int)MANDOCLEVEL_SYSERR, "pledge");
+ if (pledge("stdio rpath tmppath tty proc exec", NULL) == -1) {
+ mandoc_msg(MANDOCERR_PLEDGE, 0, 0, "%s", strerror(errno));
+ return mandoc_msg_getrc();
+ }
#endif
-
#if HAVE_SANDBOX_INIT
if (sandbox_init(kSBXProfileNoInternet, SANDBOX_NAMED, NULL) == -1)
errx((int)MANDOCLEVEL_SYSERR, "sandbox_init");
@@ -221,19 +220,29 @@ main(int argc, char *argv[])
outmode = OUTMODE_ALL;
break;
case 'I':
- if (strncmp(optarg, "os=", 3)) {
- warnx("-I %s: Bad argument", optarg);
- return (int)MANDOCLEVEL_BADARG;
+ if (strncmp(optarg, "os=", 3) != 0) {
+ mandoc_msg(MANDOCERR_BADARG_BAD, 0, 0,
+ "-I %s", optarg);
+ return mandoc_msg_getrc();
}
if (curp.os_s != NULL) {
- warnx("-I %s: Duplicate argument", optarg);
- return (int)MANDOCLEVEL_BADARG;
+ mandoc_msg(MANDOCERR_BADARG_DUPE, 0, 0,
+ "-I %s", optarg);
+ return mandoc_msg_getrc();
}
curp.os_s = mandoc_strdup(optarg + 3);
break;
case 'K':
- if ( ! koptions(&options, optarg))
- return (int)MANDOCLEVEL_BADARG;
+ options &= ~(MPARSE_UTF8 | MPARSE_LATIN1);
+ if (strcmp(optarg, "utf-8") == 0)
+ options |= MPARSE_UTF8;
+ else if (strcmp(optarg, "iso-8859-1") == 0)
+ options |= MPARSE_LATIN1;
+ else if (strcmp(optarg, "us-ascii") != 0) {
+ mandoc_msg(MANDOCERR_BADARG_BAD, 0, 0,
+ "-K %s", optarg);
+ return mandoc_msg_getrc();
+ }
break;
case 'k':
search.argmode = ARG_EXPR;
@@ -264,12 +273,37 @@ main(int argc, char *argv[])
search.sec = optarg;
break;
case 'T':
- if ( ! toptions(&curp, optarg))
- return (int)MANDOCLEVEL_BADARG;
+ if (strcmp(optarg, "ascii") == 0)
+ curp.outtype = OUTT_ASCII;
+ else if (strcmp(optarg, "lint") == 0) {
+ curp.outtype = OUTT_LINT;
+ mandoc_msg_setoutfile(stdout);
+ mandoc_msg_setmin(MANDOCERR_BASE);
+ } else if (strcmp(optarg, "tree") == 0)
+ curp.outtype = OUTT_TREE;
+ else if (strcmp(optarg, "man") == 0)
+ curp.outtype = OUTT_MAN;
+ else if (strcmp(optarg, "html") == 0)
+ curp.outtype = OUTT_HTML;
+ else if (strcmp(optarg, "markdown") == 0)
+ curp.outtype = OUTT_MARKDOWN;
+ else if (strcmp(optarg, "utf8") == 0)
+ curp.outtype = OUTT_UTF8;
+ else if (strcmp(optarg, "locale") == 0)
+ curp.outtype = OUTT_LOCALE;
+ else if (strcmp(optarg, "ps") == 0)
+ curp.outtype = OUTT_PS;
+ else if (strcmp(optarg, "pdf") == 0)
+ curp.outtype = OUTT_PDF;
+ else {
+ mandoc_msg(MANDOCERR_BADARG_BAD, 0, 0,
+ "-T %s", optarg);
+ return mandoc_msg_getrc();
+ }
break;
case 'W':
- if ( ! woptions(&curp, optarg))
- return (int)MANDOCLEVEL_BADARG;
+ if (woptions(&curp, optarg) == -1)
+ return mandoc_msg_getrc();
break;
case 'w':
outmode = OUTMODE_FLN;
@@ -305,12 +339,9 @@ main(int argc, char *argv[])
search.outkey = oarg;
else {
while (oarg != NULL) {
- thisarg = oarg;
if (manconf_output(&conf.output,
- strsep(&oarg, ","), 0) == 0)
- continue;
- warnx("-O %s: Bad argument", thisarg);
- return (int)MANDOCLEVEL_BADARG;
+ strsep(&oarg, ","), 0) == -1)
+ return mandoc_msg_getrc();
}
}
}
@@ -334,9 +365,13 @@ main(int argc, char *argv[])
}
#if HAVE_PLEDGE
- if (!use_pager)
- if (pledge("stdio rpath", NULL) == -1)
- err((int)MANDOCLEVEL_SYSERR, "pledge");
+ if (use_pager == 0) {
+ if (pledge("stdio rpath", NULL) == -1) {
+ mandoc_msg(MANDOCERR_PLEDGE, 0, 0,
+ "%s", strerror(errno));
+ return mandoc_msg_getrc();
+ }
+ }
#endif
/* Parse arguments. */
@@ -361,7 +396,7 @@ main(int argc, char *argv[])
} else if (argc > 1 &&
((uc = (unsigned char *)argv[0]) != NULL) &&
((isdigit(uc[0]) && (uc[1] == '\0' ||
- (isalpha(uc[1]) && uc[2] == '\0'))) ||
+ isalpha(uc[1]))) ||
(uc[0] == 'n' && uc[1] == '\0'))) {
search.sec = (char *)uc;
argv++;
@@ -426,7 +461,7 @@ main(int argc, char *argv[])
usage(search.argmode);
if (sz == 0 && search.argmode == ARG_NAME)
- fs_search(&search, &conf.manpath,
+ (void)fs_search(&search, &conf.manpath,
argc, argv, &res, &sz);
if (search.argmode == ARG_NAME) {
@@ -434,7 +469,10 @@ main(int argc, char *argv[])
if (strchr(argv[c], '/') == NULL)
continue;
if (access(argv[c], R_OK) == -1) {
- warn("%s", argv[c]);
+ mandoc_msg_setinfilename(argv[c]);
+ mandoc_msg(MANDOCERR_BADARG_BAD,
+ 0, 0, "%s", strerror(errno));
+ mandoc_msg_setinfilename(NULL);
continue;
}
res = mandoc_reallocarray(res,
@@ -442,6 +480,7 @@ main(int argc, char *argv[])
res[sz].file = mandoc_strdup(argv[c]);
res[sz].names = NULL;
res[sz].output = NULL;
+ res[sz].bits = 0;
res[sz].ipath = SIZE_MAX;
res[sz].sec = 10;
res[sz].form = FORM_SRC;
@@ -464,7 +503,7 @@ main(int argc, char *argv[])
if (outmode == OUTMODE_ONE) {
argc = 1;
- best_prio = 20;
+ best_prio = 40;
} else if (outmode == OUTMODE_ALL)
argc = (int)sz;
@@ -483,10 +522,21 @@ main(int argc, char *argv[])
sec = res[i].file;
sec += strcspn(sec, "123456789");
if (sec[0] == '\0')
- continue;
+ continue; /* No section at all. */
prio = sec_prios[sec[0] - '1'];
- if (sec[1] != '/')
- prio += 10;
+ if (search.sec != NULL) {
+ ssz = strlen(search.sec);
+ if (strncmp(sec, search.sec, ssz) == 0)
+ sec += ssz;
+ } else
+ sec++; /* Prefer without suffix. */
+ if (*sec != '/')
+ prio += 10; /* Wrong dir name. */
+ if (search.sec != NULL &&
+ (strlen(sec) <= ssz + 3 ||
+ strcmp(sec + strlen(sec) - ssz,
+ search.sec) != 0))
+ prio += 20; /* Wrong file ext. */
if (prio >= best_prio)
continue;
best_prio = prio;
@@ -508,16 +558,26 @@ main(int argc, char *argv[])
#if HAVE_PLEDGE
if (use_pager) {
- if (pledge("stdio rpath tmppath tty proc exec", NULL) == -1)
- err((int)MANDOCLEVEL_SYSERR, "pledge");
+ if (pledge("stdio rpath tmppath tty proc exec", NULL) == -1) {
+ mandoc_msg(MANDOCERR_PLEDGE, 0, 0,
+ "%s", strerror(errno));
+ return mandoc_msg_getrc();
+ }
} else {
- if (pledge("stdio rpath", NULL) == -1)
- err((int)MANDOCLEVEL_SYSERR, "pledge");
+ if (pledge("stdio rpath", NULL) == -1) {
+ mandoc_msg(MANDOCERR_PLEDGE, 0, 0,
+ "%s", strerror(errno));
+ return mandoc_msg_getrc();
+ }
}
#endif
- if (search.argmode == ARG_FILE)
- moptions(&options, auxpaths);
+ if (search.argmode == ARG_FILE && auxpaths != NULL) {
+ if (strcmp(auxpaths, "doc") == 0)
+ options |= MPARSE_MDOC;
+ else if (strcmp(auxpaths, "an") == 0)
+ options |= MPARSE_MAN;
+ }
mchars_alloc();
curp.mp = mparse_alloc(options, curp.os_e, curp.os_s);
@@ -525,7 +585,8 @@ main(int argc, char *argv[])
if (argc < 1) {
if (use_pager) {
tag_files = tag_init();
- tag_files->tagname = conf.output.tag;
+ if (tag_files != NULL)
+ tag_files->tagname = conf.output.tag;
}
thisarg = "<stdin>";
mandoc_msg_setinfilename(thisarg);
@@ -558,30 +619,31 @@ main(int argc, char *argv[])
} else
thisarg = *argv;
+ mandoc_msg_setinfilename(thisarg);
fd = mparse_open(curp.mp, thisarg);
if (fd != -1) {
if (use_pager) {
use_pager = 0;
tag_files = tag_init();
- tag_files->tagname = conf.output.tag;
+ if (tag_files != NULL)
+ tag_files->tagname = conf.output.tag;
}
- mandoc_msg_setinfilename(thisarg);
if (resp == NULL || resp->form == FORM_SRC)
parse(&curp, fd, thisarg);
else
- passthrough(resp->file, fd,
- conf.output.synopsisonly);
- mandoc_msg_setinfilename(NULL);
+ passthrough(fd, conf.output.synopsisonly);
if (ferror(stdout)) {
if (tag_files != NULL) {
- warn("%s", tag_files->ofn);
+ mandoc_msg(MANDOCERR_WRITE, 0, 0,
+ "%s: %s", tag_files->ofn,
+ strerror(errno));
tag_unlink();
tag_files = NULL;
} else
- warn("stdout");
- mandoc_msg_setrc(MANDOCLEVEL_SYSERR);
+ mandoc_msg(MANDOCERR_WRITE, 0, 0,
+ "%s", strerror(errno));
break;
}
@@ -591,9 +653,11 @@ main(int argc, char *argv[])
terminal_sepline(curp.outdata);
}
} else
- mandoc_msg(MANDOCERR_FILE, 0, 0,
- "%s: %s", thisarg, strerror(errno));
+ mandoc_msg(resp == NULL ? MANDOCERR_BADARG_BAD :
+ MANDOCERR_OPEN, 0, 0, "%s", strerror(errno));
+ mandoc_msg_setinfilename(NULL);
+
if (curp.wstop && mandoc_msg_getrc() != MANDOCLEVEL_OK)
break;
@@ -684,8 +748,8 @@ out:
continue;
if (pid == -1) {
- warn("wait");
- mandoc_msg_setrc(MANDOCLEVEL_SYSERR);
+ mandoc_msg(MANDOCERR_WAIT, 0, 0,
+ "%s", strerror(errno));
break;
}
if (!WIFSTOPPED(status))
@@ -694,14 +758,16 @@ out:
signum = WSTOPSIG(status);
}
tag_unlink();
- }
+ } else if (curp.outtype != OUTT_LINT &&
+ (search.argmode == ARG_FILE || sz > 0))
+ mandoc_msg_summary();
+
return (int)mandoc_msg_getrc();
}
static void
usage(enum argmode argmode)
{
-
switch (argmode) {
case ARG_FILE:
fputs("usage: mandoc [-ac] [-I os=name] "
@@ -732,6 +798,7 @@ fs_lookup(const struct manpaths *paths, size_t ipath,
const char *sec, const char *arch, const char *name,
struct manpage **res, size_t *ressz)
{
+ struct stat sb;
glob_t globinfo;
struct manpage *page;
char *file;
@@ -741,13 +808,13 @@ fs_lookup(const struct manpaths *paths, size_t ipath,
form = FORM_SRC;
mandoc_asprintf(&file, "%s/man%s/%s.%s",
paths->paths[ipath], sec, name, sec);
- if (access(file, R_OK) != -1)
+ if (stat(file, &sb) != -1)
goto found;
free(file);
mandoc_asprintf(&file, "%s/cat%s/%s.0",
paths->paths[ipath], sec, name);
- if (access(file, R_OK) != -1) {
+ if (stat(file, &sb) != -1) {
form = FORM_CAT;
goto found;
}
@@ -756,7 +823,7 @@ fs_lookup(const struct manpaths *paths, size_t ipath,
if (arch != NULL) {
mandoc_asprintf(&file, "%s/man%s/%s/%s.%s",
paths->paths[ipath], sec, arch, name, sec);
- if (access(file, R_OK) != -1)
+ if (stat(file, &sb) != -1)
goto found;
free(file);
}
@@ -765,37 +832,42 @@ fs_lookup(const struct manpaths *paths, size_t ipath,
paths->paths[ipath], sec, name);
globres = glob(file, 0, NULL, &globinfo);
if (globres != 0 && globres != GLOB_NOMATCH)
- warn("%s: glob", file);
+ mandoc_msg(MANDOCERR_GLOB, 0, 0,
+ "%s: %s", file, strerror(errno));
free(file);
if (globres == 0)
file = mandoc_strdup(*globinfo.gl_pathv);
globfree(&globinfo);
- if (globres == 0)
- goto found;
+ if (globres == 0) {
+ if (stat(file, &sb) != -1)
+ goto found;
+ free(file);
+ }
if (res != NULL || ipath + 1 != paths->sz)
- return 0;
+ return -1;
mandoc_asprintf(&file, "%s.%s", name, sec);
- globres = access(file, R_OK);
+ globres = stat(file, &sb);
free(file);
- return globres != -1;
+ return globres;
found:
warnx("outdated mandoc.db lacks %s(%s) entry, run %s %s",
name, sec, BINM_MAKEWHATIS, paths->paths[ipath]);
if (res == NULL) {
free(file);
- return 1;
+ return 0;
}
- *res = mandoc_reallocarray(*res, ++*ressz, sizeof(struct manpage));
+ *res = mandoc_reallocarray(*res, ++*ressz, sizeof(**res));
page = *res + (*ressz - 1);
page->file = file;
page->names = NULL;
page->output = NULL;
+ page->bits = NAME_FILE & NAME_MASK;
page->ipath = ipath;
page->sec = (*sec >= '1' && *sec <= '9') ? *sec - '1' + 1 : 10;
page->form = form;
- return 1;
+ return 0;
}
static int
@@ -817,14 +889,14 @@ fs_search(const struct mansearch *cfg, const struct ma
for (ipath = 0; ipath < paths->sz; ipath++) {
if (cfg->sec != NULL) {
if (fs_lookup(paths, ipath, cfg->sec,
- cfg->arch, *argv, res, ressz) &&
+ cfg->arch, *argv, res, ressz) != -1 &&
cfg->firstmatch)
- return 1;
+ return 0;
} else for (isec = 0; isec < nsec; isec++)
if (fs_lookup(paths, ipath, sections[isec],
- cfg->arch, *argv, res, ressz) &&
+ cfg->arch, *argv, res, ressz) != -1 &&
cfg->firstmatch)
- return 1;
+ return 0;
}
if (res != NULL && *ressz == lastsz &&
strchr(*argv, '/') == NULL) {
@@ -843,7 +915,7 @@ fs_search(const struct mansearch *cfg, const struct ma
argv++;
argc--;
}
- return 0;
+ return -1;
}
static void
@@ -950,7 +1022,7 @@ check_xr(void)
search.firstmatch = 1;
if (mansearch(&search, &paths, 1, &xr->name, NULL, &sz))
continue;
- if (fs_search(&search, &paths, 1, &xr->name, NULL, &sz))
+ if (fs_search(&search, &paths, 1, &xr->name, NULL, &sz) != -1)
continue;
if (xr->count == 1)
mandoc_msg(MANDOCERR_XR_BAD, xr->line,
@@ -990,34 +1062,34 @@ outdata_alloc(struct curparse *curp)
}
static void
-passthrough(const char *file, int fd, int synopsis_only)
+passthrough(int fd, int synopsis_only)
{
const char synb[] = "S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS";
const char synr[] = "SYNOPSIS";
FILE *stream;
- const char *syscall;
char *line, *cp;
size_t linesz;
ssize_t len, written;
- int print;
+ int lno, print;
+ stream = NULL;
line = NULL;
linesz = 0;
if (fflush(stdout) == EOF) {
- syscall = "fflush";
- goto fail;
+ mandoc_msg(MANDOCERR_FFLUSH, 0, 0, "%s", strerror(errno));
+ goto done;
}
-
if ((stream = fdopen(fd, "r")) == NULL) {
close(fd);
- syscall = "fdopen";
- goto fail;
+ mandoc_msg(MANDOCERR_FDOPEN, 0, 0, "%s", strerror(errno));
+ goto done;
}
- print = 0;
+ lno = print = 0;
while ((len = getline(&line, &linesz, stream)) != -1) {
+ lno++;
cp = line;
if (synopsis_only) {
if (print) {
@@ -1035,97 +1107,23 @@ passthrough(const char *file, int fd, int synopsis_onl
}
}
for (; len > 0; len -= written) {
- if ((written = write(STDOUT_FILENO, cp, len)) != -1)
- continue;
- fclose(stream);
- syscall = "write";
- goto fail;
+ if ((written = write(STDOUT_FILENO, cp, len)) == -1) {
+ mandoc_msg(MANDOCERR_WRITE, 0, 0,
+ "%s", strerror(errno));
+ goto done;
+ }
}
}
+ if (ferror(stream))
+ mandoc_msg(MANDOCERR_GETLINE, lno, 0, "%s", strerror(errno));
- if (ferror(stream)) {
- fclose(stream);
- syscall = "getline";
- goto fail;
- }
-
done:
free(line);
- fclose(stream);
- return;
-
-fail:
- free(line);
- warn("%s: SYSERR: %s", file, syscall);
- mandoc_msg_setrc(MANDOCLEVEL_SYSERR);
+ if (stream != NULL)
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-stable-12
mailing list