mirror of https://gitee.com/openkylin/cups.git
182 lines
3.6 KiB
C
182 lines
3.6 KiB
C
/*
|
|
* Help index test program for CUPS.
|
|
*
|
|
* Copyright 2007-2017 by Apple Inc.
|
|
* Copyright 1997-2007 by Easy Software Products.
|
|
*
|
|
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
|
|
*/
|
|
|
|
/*
|
|
* Include necessary headers...
|
|
*/
|
|
|
|
#include "cgi.h"
|
|
|
|
|
|
/*
|
|
* Local functions...
|
|
*/
|
|
|
|
static void list_nodes(const char *title, cups_array_t *nodes);
|
|
static int usage(void);
|
|
|
|
|
|
/*
|
|
* 'main()' - Test the help index code.
|
|
*/
|
|
|
|
int /* O - Exit status */
|
|
main(int argc, /* I - Number of command-line arguments */
|
|
char *argv[]) /* I - Command-line arguments */
|
|
{
|
|
int i; /* Looping var */
|
|
help_index_t *hi, /* Help index */
|
|
*search; /* Search index */
|
|
const char *opt, /* Current option character */
|
|
*dir = ".", /* Directory to index */
|
|
*q = NULL, /* Query string */
|
|
*section = NULL, /* Section string */
|
|
*filename = NULL; /* Filename string */
|
|
|
|
|
|
/*
|
|
* Parse the command-line...
|
|
*/
|
|
|
|
for (i = 1; i < argc; i ++)
|
|
{
|
|
if (argv[i][0] == '-')
|
|
{
|
|
if (!strcmp(argv[i], "--help"))
|
|
{
|
|
usage();
|
|
return (0);
|
|
}
|
|
|
|
for (opt = argv[i] + 1; *opt; opt ++)
|
|
{
|
|
switch (*opt)
|
|
{
|
|
case 'd' : /* -d directory */
|
|
i ++;
|
|
if (i < argc)
|
|
{
|
|
dir = argv[i];
|
|
}
|
|
else
|
|
{
|
|
fputs("testhi: Missing directory for \"-d\" option.\n", stderr);
|
|
return (usage());
|
|
}
|
|
break;
|
|
|
|
case 's' : /* -s section */
|
|
i ++;
|
|
if (i < argc)
|
|
{
|
|
section = argv[i];
|
|
}
|
|
else
|
|
{
|
|
fputs("testhi: Missing section name for \"-s\" option.\n", stderr);
|
|
return (usage());
|
|
}
|
|
break;
|
|
|
|
default :
|
|
fprintf(stderr, "testhi: Unknown option \"-%c\".\n", *opt);
|
|
return (usage());
|
|
}
|
|
}
|
|
}
|
|
else if (!q)
|
|
q = argv[i];
|
|
else if (!filename)
|
|
filename = argv[i];
|
|
else
|
|
{
|
|
fprintf(stderr, "testhi: Unknown argument \"%s\".\n", argv[i]);
|
|
return (usage());
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Load the help index...
|
|
*/
|
|
|
|
hi = helpLoadIndex("testhi.index", dir);
|
|
|
|
list_nodes("nodes", hi->nodes);
|
|
list_nodes("sorted", hi->sorted);
|
|
|
|
/*
|
|
* Do any searches...
|
|
*/
|
|
|
|
if (q)
|
|
{
|
|
search = helpSearchIndex(hi, q, section, filename);
|
|
|
|
if (search)
|
|
{
|
|
list_nodes(argv[1], search->sorted);
|
|
helpDeleteIndex(search);
|
|
}
|
|
else
|
|
printf("%s (0 nodes)\n", q);
|
|
}
|
|
|
|
helpDeleteIndex(hi);
|
|
|
|
/*
|
|
* Return with no errors...
|
|
*/
|
|
|
|
return (0);
|
|
}
|
|
|
|
|
|
/*
|
|
* 'list_nodes()' - List nodes in an array...
|
|
*/
|
|
|
|
static void
|
|
list_nodes(const char *title, /* I - Title string */
|
|
cups_array_t *nodes) /* I - Nodes */
|
|
{
|
|
int i; /* Looping var */
|
|
help_node_t *node; /* Current node */
|
|
|
|
|
|
printf("%s (%d nodes):\n", title, cupsArrayCount(nodes));
|
|
for (i = 1, node = (help_node_t *)cupsArrayFirst(nodes);
|
|
node;
|
|
i ++, node = (help_node_t *)cupsArrayNext(nodes))
|
|
{
|
|
if (node->anchor)
|
|
printf(" %d: %s#%s \"%s\"", i, node->filename, node->anchor,
|
|
node->text);
|
|
else
|
|
printf(" %d: %s \"%s\"", i, node->filename, node->text);
|
|
|
|
printf(" (%d words)\n", cupsArrayCount(node->words));
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* 'usage()' - Show program usage.
|
|
*/
|
|
|
|
static int /* O - Exit status */
|
|
usage(void)
|
|
{
|
|
puts("Usage: ./testhi [options] [\"query\"] [filename]");
|
|
puts("Options:");
|
|
puts("-d directory Specify index directory.");
|
|
puts("-s section Specify search section.");
|
|
|
|
return (1);
|
|
}
|