* help: generate help texts from text file / awk

This commit is contained in:
djcb 2012-07-20 11:05:18 +03:00
parent 2f7f3a0e57
commit 1c2a87a841
5 changed files with 206 additions and 63 deletions

View File

@ -40,6 +40,8 @@ AC_PROG_INSTALL
AC_PROG_CXX
AC_HEADER_STDC
AC_PROG_AWK
AC_CHECK_HEADERS([locale.h langinfo.h])
# use the 64-bit versions

View File

@ -49,6 +49,16 @@ mu_SOURCES= \
mu-cmd.c \
mu-cmd.h
BUILT_SOURCES= \
mu-help-strings.h
mu-help-strings.h: mu-help-strings.txt mu-help-strings.awk
$(AWK) -f mu-help-strings.awk < $< > $@
mu_LDADD= \
${top_builddir}/lib/libmu.la \
$(GLIB_LIBS)
EXTRA_DIST= \
mu-help-strings.awk \
mu-help-strings.txt

View File

@ -466,76 +466,20 @@ get_option_group (MuConfigCmd cmd)
static const gchar*
cmd_help (MuConfigCmd cmd, gboolean long_help)
{
unsigned u;
static const struct {
MuConfigCmd cmd;
const char *usage;
const char *long_help;
} help_strings[] = {
{ MU_CONFIG_CMD_ADD,
"mu add <file> [<files>]",
"mu add is the command to add specific measage files to the\n"
"database. Each of the files must be specified with an "
"absolute path." },
{ MU_CONFIG_CMD_CFIND,
"mu cfind [options] [<pattern>]",
"mu cfind is the mu command to find contacts in the mu\n"
"database and export them for use in other programs." },
{ MU_CONFIG_CMD_EXTRACT,
"mu extract [options] <file>\n"
"mu extract [options] <file> <pattern>",
"mu extract is the mu command to display and save message parts "
"(attachments)\n, and open them with other tools." },
{ MU_CONFIG_CMD_FIND,
"mu find [options] <search expression>",
"mu find is the mu command for searching e-mail message that were "
"stored earlier using mu index(1)." },
{ MU_CONFIG_CMD_HELP,
"mu help <command>",
"mu find is the mu command to get help about <command>." },
{ MU_CONFIG_CMD_INDEX,
"mu index [options]",
"mu index is the mu command for scanning the contents of Maildir "
"directories\nand storing the results in a Xapian database.\n\nThe "
"data can then be queried using mu-find(1)."},
{ MU_CONFIG_CMD_MKDIR,
"mu mkdir [options] <dir> [<dirs>]",
"mu mkdir is the mu command for creating Maildirs.\nIt does not "
"use the mu database. "},
{ MU_CONFIG_CMD_REMOVE,
"mu remove [options] <file> [<files>]",
"mu remove is the mu command to remove messages from the database." },
{ MU_CONFIG_CMD_SERVER,
"mu server [options]",
"mu server starts a simple shell in which one can query and "
"manipulate the mu database.\nThe output of the commands is terms "
"of Lisp symbolic expressions (s-exps).\nmu server is not meant for "
"use by humans; instead, it is designed specifically\nfor the "
"mu4e e-mail client." },
{ MU_CONFIG_CMD_VERIFY,
"mu verify [options] <msgfile>",
"mu verify is the mu command for verifying message signatures "
"(such as PGP/GPG signatures)\nand displaying information about them."
"\n\nThe command works on message files, and does not require "
"the message to be indexed in the database."},
{ MU_CONFIG_CMD_VIEW,
"mu view [options] <file> [<files>]",
"mu view is the mu command for displaying e-mail message files. It "
"works on message files and does \fInot\fR require the message to be "
"indexed in the database."}
};
/* this include gets us MU_HELP_STRINGS */
#include "mu-help-strings.h"
for (u = 0; u != G_N_ELEMENTS(help_strings); ++u)
if (cmd == help_strings[u].cmd) {
for (u = 0; u != G_N_ELEMENTS(MU_HELP_STRINGS); ++u)
if (cmd == MU_HELP_STRINGS[u].cmd) {
if (long_help)
return help_strings[u].long_help;
return MU_HELP_STRINGS[u].long_help;
else
return help_strings[u].usage ;
return MU_HELP_STRINGS[u].usage ;
}
g_return_val_if_reached ("");
@ -543,7 +487,10 @@ cmd_help (MuConfigCmd cmd, gboolean long_help)
}
/* ugh yuck massaging of the GOption text output */
/* ugh yuck massaging the GOption text output; glib prepares some text
* which has a 'Usage:' for the 'help' commmand. However, we need the
* help for the command we're asking help for. So, we remove the Usage:
* from what glib generates. :-( */
static gchar*
massage_help (const char *help)
{

69
mu/mu-help-strings.awk Normal file
View File

@ -0,0 +1,69 @@
## Copyright (C) 2012 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software Foundation,
## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
## convert text blobs statements into c-strings
BEGIN {
in_def=0;
in_string=0;
# srand();
# guard=int(100000*rand());
# print "#ifndef __" guard "__"
print "/* Do not edit - auto-generated. */"
print "static const struct {"
print "\tMuConfigCmd cmd;"
print "\tconst char *usage;"
print "\tconst char *long_help;"
print "} MU_HELP_STRINGS[] = {"
}
/^#BEGIN/ {
print "\t{ " $2 "," # e.g., MU_CONFIG_CMD_ADD
in_def=1
}
/^#STRING/ {
if (in_def== 1) {
if (in_string==1) {
print ",";
}
in_string=1
}
}
/^#END/ {
if (in_string==1) {
in_string=0;
}
in_def=0;
print "\n\t},\n"
}
!/^#/ {
if (in_string==1) {
printf "\n\t\"" $0 "\\n\""
}
}
END {
print "};"
# print "#endif /*" guard "*/"
print "/* the end */"
}

115
mu/mu-help-strings.txt Normal file
View File

@ -0,0 +1,115 @@
#-*-mode:org-*-
# Copyright (C) 2012 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#BEGIN MU_CONFIG_CMD_ADD
#STRING
mu add <file> [<files>]
#STRING
mu add is the command to add specific measage files to the
database. Each of the files must be specified with an
absolute path
#END
#BEGIN MU_CONFIG_CMD_CFIND
#STRING
mu cfind [options] [<pattern>]
#STRING
mu cfind is the mu command to find contacts in the mu database and export them
for use in other programs.
#END
#BEGIN MU_CONFIG_CMD_EXTRACT
#STRING
mu extract [options] <file>
#STRING
mu extract is the mu command to display and save message parts
(attachments), and open them with other tools.
#END
#BEGIN MU_CONFIG_CMD_FIND
#STRING
mu find [options] <search expression>
#STRING
mu find is the mu command for searching e-mail message that were
stored earlier using mu index(1).
#END
#BEGIN MU_CONFIG_CMD_HELP
#STRING
mu help <command>
#STRING
mu find is the mu command to get help about <command>.
#END
#BEGIN MU_CONFIG_CMD_INDEX
#STRING
mu index [options]
#STRING
mu index is the mu command for scanning the contents of Maildir
directories and storing the results in a Xapian database.The
data can then be queried using mu-find(1).
#END
#BEGIN MU_CONFIG_CMD_MKDIR
#STRING
mu mkdir [options] <dir> [<dirs>]
#STRING
mu mkdir is the mu command for creating Maildirs.It does not
use the mu database.
#END
#BEGIN MU_CONFIG_CMD_REMOVE
#STRING
mu remove [options] <file> [<files>]
#STRING
mu remove is the mu command to remove messages from the database.
#END
#BEGIN MU_CONFIG_CMD_SERVER
#STRING
mu server [options]
#STRING
mu server starts a simple shell in which one can query and
manipulate the mu database.The output of the commands is terms
of Lisp symbolic expressions (s-exps).mu server is not meant for
use by humans; instead, it is designed specificallyfor the
mu4e e-mail client.
#END
#BEGIN MU_CONFIG_CMD_VERIFY
#STRING
mu verify [options] <msgfile>
#STRING
mu verify is the mu command for verifying message signatures
(such as PGP/GPG signatures)and displaying information about them.
The command works on message files, and does not require
the message to be indexed in the database.
#END
#BEGIN MU_CONFIG_CMD_VIEW
#STRING
mu view [options] <file> [<files>]
#STRING
mu view is the mu command for displaying e-mail message files. It
works on message files and does not require the message to be
indexed in the database.
#END