1 /*
2 * Help index test program for CUPS.
3 *
4 * Copyright 2007-2017 by Apple Inc.
5 * Copyright 1997-2007 by Easy Software Products.
6 *
7 * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
8 */
9
10 /*
11 * Include necessary headers...
12 */
13
14 #include "cgi.h"
15
16
17 /*
18 * Local functions...
19 */
20
21 static void list_nodes(const char *title, cups_array_t *nodes);
22 static int usage(void);
23
24
25 /*
26 * 'main()' - Test the help index code.
27 */
28
29 int /* O - Exit status */
main(int argc,char * argv[])30 main(int argc, /* I - Number of command-line arguments */
31 char *argv[]) /* I - Command-line arguments */
32 {
33 int i; /* Looping var */
34 help_index_t *hi, /* Help index */
35 *search; /* Search index */
36 const char *opt, /* Current option character */
37 *dir = ".", /* Directory to index */
38 *q = NULL, /* Query string */
39 *section = NULL, /* Section string */
40 *filename = NULL; /* Filename string */
41
42
43 /*
44 * Parse the command-line...
45 */
46
47 for (i = 1; i < argc; i ++)
48 {
49 if (argv[i][0] == '-')
50 {
51 if (!strcmp(argv[i], "--help"))
52 {
53 usage();
54 return (0);
55 }
56
57 for (opt = argv[i] + 1; *opt; opt ++)
58 {
59 switch (*opt)
60 {
61 case 'd' : /* -d directory */
62 i ++;
63 if (i < argc)
64 {
65 dir = argv[i];
66 }
67 else
68 {
69 fputs("testhi: Missing directory for \"-d\" option.\n", stderr);
70 return (usage());
71 }
72 break;
73
74 case 's' : /* -s section */
75 i ++;
76 if (i < argc)
77 {
78 section = argv[i];
79 }
80 else
81 {
82 fputs("testhi: Missing section name for \"-s\" option.\n", stderr);
83 return (usage());
84 }
85 break;
86
87 default :
88 fprintf(stderr, "testhi: Unknown option \"-%c\".\n", *opt);
89 return (usage());
90 }
91 }
92 }
93 else if (!q)
94 q = argv[i];
95 else if (!filename)
96 filename = argv[i];
97 else
98 {
99 fprintf(stderr, "testhi: Unknown argument \"%s\".\n", argv[i]);
100 return (usage());
101 }
102 }
103
104 /*
105 * Load the help index...
106 */
107
108 hi = helpLoadIndex("testhi.index", dir);
109
110 list_nodes("nodes", hi->nodes);
111 list_nodes("sorted", hi->sorted);
112
113 /*
114 * Do any searches...
115 */
116
117 if (q)
118 {
119 search = helpSearchIndex(hi, q, section, filename);
120
121 if (search)
122 {
123 list_nodes(argv[1], search->sorted);
124 helpDeleteIndex(search);
125 }
126 else
127 printf("%s (0 nodes)\n", q);
128 }
129
130 helpDeleteIndex(hi);
131
132 /*
133 * Return with no errors...
134 */
135
136 return (0);
137 }
138
139
140 /*
141 * 'list_nodes()' - List nodes in an array...
142 */
143
144 static void
list_nodes(const char * title,cups_array_t * nodes)145 list_nodes(const char *title, /* I - Title string */
146 cups_array_t *nodes) /* I - Nodes */
147 {
148 int i; /* Looping var */
149 help_node_t *node; /* Current node */
150
151
152 printf("%s (%d nodes):\n", title, cupsArrayCount(nodes));
153 for (i = 1, node = (help_node_t *)cupsArrayFirst(nodes);
154 node;
155 i ++, node = (help_node_t *)cupsArrayNext(nodes))
156 {
157 if (node->anchor)
158 printf(" %d: %s#%s \"%s\"", i, node->filename, node->anchor,
159 node->text);
160 else
161 printf(" %d: %s \"%s\"", i, node->filename, node->text);
162
163 printf(" (%d words)\n", cupsArrayCount(node->words));
164 }
165 }
166
167
168 /*
169 * 'usage()' - Show program usage.
170 */
171
172 static int /* O - Exit status */
usage(void)173 usage(void)
174 {
175 puts("Usage: ./testhi [options] [\"query\"] [filename]");
176 puts("Options:");
177 puts("-d directory Specify index directory.");
178 puts("-s section Specify search section.");
179
180 return (1);
181 }
182