]> git.cameronkatri.com Git - mandoc.git/blobdiff - mansearch.h
tagging issues from weerd@ regarding hyphens
[mandoc.git] / mansearch.h
index 25e6d6b7afb6a4345277caa11a1f54427abbf03a..8a0aa121d0c6a50404fc37cdb7d197248c4362d9 100644 (file)
@@ -1,6 +1,7 @@
-/*     $Id: mansearch.h,v 1.4 2013/06/06 14:27:02 schwarze Exp $ */
+/*     $Id: mansearch.h,v 1.30 2019/04/30 18:51:57 schwarze Exp $ */
 /*
  * Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2013, 2014, 2016, 2017 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
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-#ifndef MANSEARCH_H
-#define MANSEARCH_H
 
 #define        MANDOC_DB        "mandoc.db"
+#define        MANDOCDB_MAGIC   0x3a7d0cdb
+#define        MANDOCDB_VERSION 1
 
-#define        TYPE_An          0x0000000000000001ULL
-#define        TYPE_Ar          0x0000000000000002ULL
-#define        TYPE_At          0x0000000000000004ULL
-#define        TYPE_Bsx         0x0000000000000008ULL
-#define        TYPE_Bx          0x0000000000000010ULL
-#define        TYPE_Cd          0x0000000000000020ULL
-#define        TYPE_Cm          0x0000000000000040ULL
-#define        TYPE_Dv          0x0000000000000080ULL
-#define        TYPE_Dx          0x0000000000000100ULL
-#define        TYPE_Em          0x0000000000000200ULL
-#define        TYPE_Er          0x0000000000000400ULL
-#define        TYPE_Ev          0x0000000000000800ULL
-#define        TYPE_Fa          0x0000000000001000ULL
-#define        TYPE_Fl          0x0000000000002000ULL
-#define        TYPE_Fn          0x0000000000004000ULL
+#define        MACRO_MAX        36
+#define        KEY_arch         0
+#define        KEY_sec          1
+#define        KEY_Nm           38
+#define        KEY_Nd           39
+#define        KEY_MAX          40
+
+#define        TYPE_arch        0x0000000000000001ULL
+#define        TYPE_sec         0x0000000000000002ULL
+#define        TYPE_Xr          0x0000000000000004ULL
+#define        TYPE_Ar          0x0000000000000008ULL
+#define        TYPE_Fa          0x0000000000000010ULL
+#define        TYPE_Fl          0x0000000000000020ULL
+#define        TYPE_Dv          0x0000000000000040ULL
+#define        TYPE_Fn          0x0000000000000080ULL
+#define        TYPE_Ic          0x0000000000000100ULL
+#define        TYPE_Pa          0x0000000000000200ULL
+#define        TYPE_Cm          0x0000000000000400ULL
+#define        TYPE_Li          0x0000000000000800ULL
+#define        TYPE_Em          0x0000000000001000ULL
+#define        TYPE_Cd          0x0000000000002000ULL
+#define        TYPE_Va          0x0000000000004000ULL
 #define        TYPE_Ft          0x0000000000008000ULL
-#define        TYPE_Fx          0x0000000000010000ULL
-#define        TYPE_Ic          0x0000000000020000ULL
-#define        TYPE_In          0x0000000000040000ULL
-#define        TYPE_Lb          0x0000000000080000ULL
-#define        TYPE_Li          0x0000000000100000ULL
-#define        TYPE_Lk          0x0000000000200000ULL
-#define        TYPE_Ms          0x0000000000400000ULL
-#define        TYPE_Mt          0x0000000000800000ULL
-#define        TYPE_Nd          0x0000000001000000ULL
-#define        TYPE_Nm          0x0000000002000000ULL
-#define        TYPE_Nx          0x0000000004000000ULL
-#define        TYPE_Ox          0x0000000008000000ULL
-#define        TYPE_Pa          0x0000000010000000ULL
-#define        TYPE_Rs          0x0000000020000000ULL
-#define        TYPE_Sh          0x0000000040000000ULL
-#define        TYPE_Ss          0x0000000080000000ULL
-#define        TYPE_St          0x0000000100000000ULL
-#define        TYPE_Sy          0x0000000200000000ULL
-#define        TYPE_Tn          0x0000000400000000ULL
-#define        TYPE_Va          0x0000000800000000ULL
+#define        TYPE_Tn          0x0000000000010000ULL
+#define        TYPE_Er          0x0000000000020000ULL
+#define        TYPE_Ev          0x0000000000040000ULL
+#define        TYPE_Sy          0x0000000000080000ULL
+#define        TYPE_Sh          0x0000000000100000ULL
+#define        TYPE_In          0x0000000000200000ULL
+#define        TYPE_Ss          0x0000000000400000ULL
+#define        TYPE_Ox          0x0000000000800000ULL
+#define        TYPE_An          0x0000000001000000ULL
+#define        TYPE_Mt          0x0000000002000000ULL
+#define        TYPE_St          0x0000000004000000ULL
+#define        TYPE_Bx          0x0000000008000000ULL
+#define        TYPE_At          0x0000000010000000ULL
+#define        TYPE_Nx          0x0000000020000000ULL
+#define        TYPE_Fx          0x0000000040000000ULL
+#define        TYPE_Lk          0x0000000080000000ULL
+#define        TYPE_Ms          0x0000000100000000ULL
+#define        TYPE_Bsx         0x0000000200000000ULL
+#define        TYPE_Dx          0x0000000400000000ULL
+#define        TYPE_Rs          0x0000000800000000ULL
 #define        TYPE_Vt          0x0000001000000000ULL
-#define        TYPE_Xr          0x0000002000000000ULL
+#define        TYPE_Lb          0x0000002000000000ULL
+#define        TYPE_Nm          0x0000004000000000ULL
+#define        TYPE_Nd          0x0000008000000000ULL
+
+#define        NAME_SYN         0x0000004000000001ULL
+#define        NAME_FIRST       0x0000004000000004ULL
+#define        NAME_TITLE       0x0000004000000006ULL
+#define        NAME_HEAD        0x0000004000000008ULL
+#define        NAME_FILE        0x0000004000000010ULL
+#define        NAME_MASK        0x000000000000001fULL
 
-__BEGIN_DECLS
+enum   form {
+       FORM_SRC = 1,   /* Format is mdoc(7) or man(7). */
+       FORM_CAT,       /* Manual page is preformatted. */
+       FORM_NONE       /* Format is unknown. */
+};
+
+enum   argmode {
+       ARG_FILE = 0,
+       ARG_NAME,
+       ARG_WORD,
+       ARG_EXPR
+};
 
 struct manpage {
-       char             file[PATH_MAX]; /* prefixed by manpath */
-       char            *desc; /* description of manpage */
-       int              form; /* 0 == catpage */
+       char            *file; /* to be prefixed by manpath */
+       char            *names; /* a list of names with sections */
+       char            *output; /* user-defined additional output */
+       uint64_t         bits; /* name type mask */
+       size_t           ipath; /* number of the manpath */
+       int              sec; /* section number, 10 means invalid */
+       enum form        form;
 };
 
 struct mansearch {
        const char      *arch; /* architecture/NULL */
        const char      *sec; /* mansection/NULL */
-       uint64_t         deftype; /* type if no key  */
-       int              flags;
-#define        MANSEARCH_WHATIS 0x01 /* whatis mode: equality, no key */
+       const char      *outkey; /* show content of this macro */
+       enum argmode     argmode; /* interpretation of arguments */
+       int              firstmatch; /* first matching database only */
 };
 
+
+struct manpaths;
+
 int    mansearch(const struct mansearch *cfg, /* options */
                const struct manpaths *paths, /* manpaths */
                int argc, /* size of argv */
                char *argv[],  /* search terms */
                struct manpage **res, /* results */
                size_t *ressz); /* results returned */
-
-__END_DECLS
-
-#endif /*!MANSEARCH_H*/
+void   mansearch_free(struct manpage *, size_t);