summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-04-04 15:55:19 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-04-04 15:55:19 +0000
commit612feaffd17f2c4aa1145f4d956d80bfcc44ee7b (patch)
tree7f9f6f78204893171dfbfcc56a8d8d1a4c435136
parent770ad91865b8eb1c1ecb431ebe1a2bbb1bb7268d (diff)
downloadmandoc-612feaffd17f2c4aa1145f4d956d80bfcc44ee7b.tar.gz
Remember which names are in the NAME section.
This helps to find missing MLINKS. Database build times do not change and database growth is minimal (1.2% with -Q, 0.7% without -Q in /usr/share/man), so making this optional would be pointless.
-rw-r--r--apropos.12
-rw-r--r--mandocdb.c13
-rw-r--r--mansearch.h83
-rw-r--r--mansearch_const.c15
4 files changed, 60 insertions, 53 deletions
diff --git a/apropos.1 b/apropos.1
index 4bcc00ce..0d12f484 100644
--- a/apropos.1
+++ b/apropos.1
@@ -1,6 +1,7 @@
.\" $Id$
.\"
.\" Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
+.\" Copyright (c) 2011, 2012, 2014 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -195,6 +196,7 @@ may be used to match any available macro key.
.Pp
Names and description:
.Bl -column "xLix" description -offset indent -compact
+.It Li NAME Ta manual name in the NAME section, subset of \&Nm
.It Li \&Nm Ta manual name
.It Li \&Nd Ta one-line manual description
.It Li arch Ta machine architecture (case-insensitive)
diff --git a/mandocdb.c b/mandocdb.c
index 803989b7..360d21c1 100644
--- a/mandocdb.c
+++ b/mandocdb.c
@@ -224,7 +224,7 @@ static const struct mdoc_handler mdocs[MDOC_MAX] = {
{ NULL, TYPE_In }, /* In */
{ NULL, TYPE_Li }, /* Li */
{ parse_mdoc_Nd, TYPE_Nd }, /* Nd */
- { parse_mdoc_Nm, TYPE_Nm }, /* Nm */
+ { parse_mdoc_Nm, 0 }, /* Nm */
{ NULL, 0 }, /* Op */
{ NULL, 0 }, /* Ot */
{ NULL, TYPE_Pa }, /* Pa */
@@ -1397,7 +1397,7 @@ parse_man(struct mpage *mpage, const struct man_node *n)
('\\' == start[0] && '-' == start[1]))
break;
- putkey(mpage, start, TYPE_Nm);
+ putkey(mpage, start, TYPE_NAME | TYPE_Nm);
if (' ' == byte) {
start += sz + 1;
@@ -1411,7 +1411,7 @@ parse_man(struct mpage *mpage, const struct man_node *n)
}
if (start == title) {
- putkey(mpage, start, TYPE_Nm);
+ putkey(mpage, start, TYPE_NAME | TYPE_Nm);
free(title);
return;
}
@@ -1588,8 +1588,11 @@ static int
parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_node *n)
{
- return(SEC_NAME == n->sec ||
- (SEC_SYNOPSIS == n->sec && MDOC_HEAD == n->type));
+ if (SEC_NAME == n->sec)
+ putmdockey(mpage, n->child, TYPE_NAME | TYPE_Nm);
+ else if (SEC_SYNOPSIS == n->sec && MDOC_HEAD == n->type)
+ putmdockey(mpage, n->child, TYPE_Nm);
+ return(0);
}
static int
diff --git a/mansearch.h b/mansearch.h
index 75e308b6..8f5169a3 100644
--- a/mansearch.h
+++ b/mansearch.h
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -20,46 +20,47 @@
#define MANDOC_DB "mandoc.db"
-#define TYPE_Nm 0x0000000000000001ULL
-#define TYPE_Nd 0x0000000000000002ULL
-#define TYPE_arch 0x0000000000000004ULL
-#define TYPE_sec 0x0000000000000008ULL
-#define TYPE_Xr 0x0000000000000010ULL
-#define TYPE_Ar 0x0000000000000020ULL
-#define TYPE_Fa 0x0000000000000040ULL
-#define TYPE_Fl 0x0000000000000080ULL
-#define TYPE_Dv 0x0000000000000100ULL
-#define TYPE_Fn 0x0000000000000200ULL
-#define TYPE_Ic 0x0000000000000400ULL
-#define TYPE_Pa 0x0000000000000800ULL
-#define TYPE_Cm 0x0000000000001000ULL
-#define TYPE_Li 0x0000000000002000ULL
-#define TYPE_Em 0x0000000000004000ULL
-#define TYPE_Cd 0x0000000000008000ULL
-#define TYPE_Va 0x0000000000010000ULL
-#define TYPE_Ft 0x0000000000020000ULL
-#define TYPE_Tn 0x0000000000040000ULL
-#define TYPE_Er 0x0000000000080000ULL
-#define TYPE_Ev 0x0000000000100000ULL
-#define TYPE_Sy 0x0000000000200000ULL
-#define TYPE_Sh 0x0000000000400000ULL
-#define TYPE_In 0x0000000000800000ULL
-#define TYPE_Ss 0x0000000001000000ULL
-#define TYPE_Ox 0x0000000002000000ULL
-#define TYPE_An 0x0000000004000000ULL
-#define TYPE_Mt 0x0000000008000000ULL
-#define TYPE_St 0x0000000010000000ULL
-#define TYPE_Bx 0x0000000020000000ULL
-#define TYPE_At 0x0000000040000000ULL
-#define TYPE_Nx 0x0000000080000000ULL
-#define TYPE_Fx 0x0000000100000000ULL
-#define TYPE_Lk 0x0000000200000000ULL
-#define TYPE_Ms 0x0000000400000000ULL
-#define TYPE_Bsx 0x0000000800000000ULL
-#define TYPE_Dx 0x0000001000000000ULL
-#define TYPE_Rs 0x0000002000000000ULL
-#define TYPE_Vt 0x0000004000000000ULL
-#define TYPE_Lb 0x0000008000000000ULL
+#define TYPE_NAME 0x0000000000000001ULL
+#define TYPE_Nm 0x0000000000000002ULL
+#define TYPE_Nd 0x0000000000000004ULL
+#define TYPE_arch 0x0000000000000008ULL
+#define TYPE_sec 0x0000000000000010ULL
+#define TYPE_Xr 0x0000000000000020ULL
+#define TYPE_Ar 0x0000000000000040ULL
+#define TYPE_Fa 0x0000000000000080ULL
+#define TYPE_Fl 0x0000000000000100ULL
+#define TYPE_Dv 0x0000000000000200ULL
+#define TYPE_Fn 0x0000000000000400ULL
+#define TYPE_Ic 0x0000000000000800ULL
+#define TYPE_Pa 0x0000000000001000ULL
+#define TYPE_Cm 0x0000000000002000ULL
+#define TYPE_Li 0x0000000000004000ULL
+#define TYPE_Em 0x0000000000008000ULL
+#define TYPE_Cd 0x0000000000010000ULL
+#define TYPE_Va 0x0000000000020000ULL
+#define TYPE_Ft 0x0000000000040000ULL
+#define TYPE_Tn 0x0000000000080000ULL
+#define TYPE_Er 0x0000000000100000ULL
+#define TYPE_Ev 0x0000000000200000ULL
+#define TYPE_Sy 0x0000000000400000ULL
+#define TYPE_Sh 0x0000000000800000ULL
+#define TYPE_In 0x0000000001000000ULL
+#define TYPE_Ss 0x0000000002000000ULL
+#define TYPE_Ox 0x0000000004000000ULL
+#define TYPE_An 0x0000000008000000ULL
+#define TYPE_Mt 0x0000000010000000ULL
+#define TYPE_St 0x0000000020000000ULL
+#define TYPE_Bx 0x0000000040000000ULL
+#define TYPE_At 0x0000000080000000ULL
+#define TYPE_Nx 0x0000000100000000ULL
+#define TYPE_Fx 0x0000000200000000ULL
+#define TYPE_Lk 0x0000000400000000ULL
+#define TYPE_Ms 0x0000000800000000ULL
+#define TYPE_Bsx 0x0000001000000000ULL
+#define TYPE_Dx 0x0000002000000000ULL
+#define TYPE_Rs 0x0000004000000000ULL
+#define TYPE_Vt 0x0000008000000000ULL
+#define TYPE_Lb 0x0000010000000000ULL
__BEGIN_DECLS
diff --git a/mansearch_const.c b/mansearch_const.c
index 01e63a26..8e4232c1 100644
--- a/mansearch_const.c
+++ b/mansearch_const.c
@@ -20,12 +20,13 @@
#include "manpath.h"
#include "mansearch.h"
-const int mansearch_keymax = 40;
+const int mansearch_keymax = 41;
-const char *const mansearch_keynames[40] = {
- "Nm", "Nd", "arch", "sec", "Xr", "Ar", "Fa", "Fl",
- "Dv", "Fn", "Ic", "Pa", "Cm", "Li", "Em", "Cd",
- "Va", "Ft", "Tn", "Er", "Ev", "Sy", "Sh", "In",
- "Ss", "Ox", "An", "Mt", "St", "Bx", "At", "Nx",
- "Fx", "Lk", "Ms", "Bsx", "Dx", "Rs", "Vt", "Lb"
+const char *const mansearch_keynames[41] = {
+ "NAME", "Nm", "Nd", "arch", "sec", "Xr", "Ar", "Fa",
+ "Fl", "Dv", "Fn", "Ic", "Pa", "Cm", "Li", "Em",
+ "Cd", "Va", "Ft", "Tn", "Er", "Ev", "Sy", "Sh",
+ "In", "Ss", "Ox", "An", "Mt", "St", "Bx", "At",
+ "Nx", "Fx", "Lk", "Ms", "Bsx", "Dx", "Rs", "Vt",
+ "Lb"
};