20#include <grass/glocale.h>
22#include "parser_local_proto.h"
24static void usage_rest_md(
bool rest);
25static void print_flag(
const char *key,
const char *label,
26 const char *description,
bool rest);
27void print_option(
const struct Option *opt,
bool rest,
char *);
28static void print_escaped(FILE *f,
const char *str,
bool rest);
29static void print_escaped_for_rest(FILE *f,
const char *str);
30static void print_escaped_for_md(FILE *f,
const char *str);
31static void print_escaped_for_rest_options(FILE *f,
const char *str);
32static void print_escaped_for_md_keywords(FILE *f,
const char *str);
40void usage_rest_md(
bool rest)
56 G_asprintf(&header,
"%s - GRASS GIS manual",
st->pgm_name);
59 fprintf(stdout,
"%s\n", header);
60 for (s = 0; s < strlen(header); s++) {
63 fprintf(stdout,
"\n");
66 fprintf(stdout,
"# %s\n", header);
68 fprintf(stdout,
"\n");
72 fprintf(stdout,
".. image:: grass_logo.png\n");
73 fprintf(stdout,
" :align: center\n");
74 fprintf(stdout,
" :alt: GRASS logo\n");
77 fprintf(stdout,
"\n");
80 fprintf(stdout,
"\n---");
83 fprintf(stdout,
"\n\n");
87 fprintf(stdout,
"## ");
88 fprintf(stdout,
"%s\n", _(
"NAME"));
90 fprintf(stdout,
"----");
91 fprintf(stdout,
"\n");
92 fprintf(stdout,
"**%s**",
st->pgm_name);
94 if (
st->module_info.label ||
st->module_info.description)
95 fprintf(stdout,
" - ");
97 if (
st->module_info.label)
98 fprintf(stdout,
"%s\n",
st->module_info.label);
100 if (
st->module_info.description) {
101 if (
st->module_info.label)
102 fprintf(stdout,
"\n");
103 fprintf(stdout,
"%s\n",
st->module_info.description);
105 fprintf(stdout,
"\n");
107 fprintf(stdout,
"### ");
108 fprintf(stdout,
"%s\n", _(
"KEYWORDS"));
110 fprintf(stdout,
"--------\n");
111 fprintf(stdout,
"\n");
112 if (
st->module_info.keywords) {
115 fprintf(stdout,
"\n");
121 fprintf(stdout,
"\n");
123 fprintf(stdout,
"### ");
124 fprintf(stdout,
"%s\n", _(
"SYNOPSIS"));
126 fprintf(stdout,
"--------\n\n");
127 fprintf(stdout,
"| ");
130 fprintf(stdout,
"\n");
132 fprintf(stdout,
"**%s**",
st->pgm_name);
134 fprintf(stdout,
"\\");
135 fprintf(stdout,
"\n");
137 fprintf(stdout,
"| ");
138 fprintf(stdout,
"**%s --help**",
st->pgm_name);
140 fprintf(stdout,
"\\");
141 fprintf(stdout,
"\n");
143 fprintf(stdout,
"| ");
144 fprintf(stdout,
"**%s**",
st->pgm_name);
148 flag = &
st->first_flag;
149 fprintf(stdout,
" [**-");
150 while (flag !=
NULL) {
151 fprintf(stdout,
"%c", flag->key);
152 flag = flag->next_flag;
154 fprintf(stdout,
"**] ");
157 fprintf(stdout,
" ");
160 opt = &
st->first_option;
162 while (opt !=
NULL) {
163 if (opt->key_desc !=
NULL)
164 type = opt->key_desc;
180 fprintf(stdout,
" ");
182 fprintf(stdout,
"[");
183 fprintf(stdout,
"**%s**=", opt->key);
185 fprintf(stdout,
"\\ ");
186 fprintf(stdout,
"*%s*", type);
188 fprintf(stdout,
" [,");
190 fprintf(stdout,
"\\ ");
191 fprintf(stdout,
"*%s*,...]", type);
194 fprintf(stdout,
"]");
196 fprintf(stdout,
" ");
198 fprintf(stdout,
"\n");
204 fprintf(stdout,
" [**--overwrite**] ");
206 fprintf(stdout,
" [**--verbose**] ");
207 fprintf(stdout,
" [**--quiet**] ");
208 fprintf(stdout,
" [**--ui**]\n");
211 fprintf(stdout,
"\n");
212 if (
st->n_flags || new_prompt) {
213 flag = &
st->first_flag;
215 fprintf(stdout,
"#### ");
216 fprintf(stdout,
"%s\n", _(
"Flags"));
218 fprintf(stdout,
"~~~~~~\n");
219 fprintf(stdout,
"\n");
220 while (
st->n_flags && flag !=
NULL) {
221 print_flag(&flag->key, flag->label, flag->description, rest);
223 fprintf(stdout,
"\\");
224 fprintf(stdout,
"\n");
225 flag = flag->next_flag;
228 print_flag(
"overwrite",
NULL,
229 _(
"Allow output files to overwrite existing files"),
232 fprintf(stdout,
"\\");
233 fprintf(stdout,
"\n");
236 print_flag(
"help",
NULL, _(
"Print usage summary"), rest);
238 fprintf(stdout,
"\\");
239 fprintf(stdout,
"\n");
240 print_flag(
"verbose",
NULL, _(
"Verbose module output"), rest);
242 fprintf(stdout,
"\\");
243 fprintf(stdout,
"\n");
244 print_flag(
"quiet",
NULL, _(
"Quiet module output"), rest);
246 fprintf(stdout,
"\\");
247 fprintf(stdout,
"\n");
248 print_flag(
"ui",
NULL, _(
"Force launching GUI dialog"), rest);
249 fprintf(stdout,
"\n");
252 fprintf(stdout,
"\n");
253 opt = &
st->first_option;
255 fprintf(stdout,
"#### ");
256 fprintf(stdout,
"%s\n", _(
"Parameters"));
258 fprintf(stdout,
"~~~~~~~~~~~\n");
259 fprintf(stdout,
"\n");
260 char image_spec_rest[GPATH_MAX];
261 image_spec_rest[0] =
'\0';
262 while (opt !=
NULL) {
267 fprintf(stdout,
"\\");
269 fprintf(stdout,
"\n");
271 if (strlen(image_spec_rest) > 0) {
272 fprintf(stdout,
"\n");
273 fprintf(stdout,
"%s", image_spec_rest);
278void print_flag(
const char *key,
const char *label,
const char *description,
282 fprintf(stdout,
"| ");
283 fprintf(stdout,
"**");
285 fprintf(stdout,
"-");
286 fprintf(stdout,
"-%s**", key);
288 fprintf(stdout,
"\\");
289 fprintf(stdout,
"\n");
292 fprintf(stdout,
"| ");
293 print_escaped(stdout,
"\t", rest);
294 print_escaped(stdout, label, rest);
296 fprintf(stdout,
"\\");
297 fprintf(stdout,
"\n");
300 fprintf(stdout,
"| ");
301 print_escaped(stdout,
"\t", rest);
302 print_escaped(stdout, description, rest);
305void print_option(
const struct Option *opt,
bool rest,
char *image_spec_rest)
310 if (opt->key_desc !=
NULL)
311 type = opt->key_desc;
329 fprintf(stdout,
"| ");
330 fprintf(stdout,
"**%s**=", opt->key);
332 fprintf(stdout,
"\\ ");
333 fprintf(stdout,
"*%s*", type);
335 fprintf(stdout,
" [,");
337 fprintf(stdout,
"\\ ");
338 fprintf(stdout,
"*%s*,...]", type);
342 fprintf(stdout,
" **[required]**");
345 fprintf(stdout,
"\\");
346 fprintf(stdout,
"\n");
349 fprintf(stdout,
"| ");
350 print_escaped(stdout,
"\t", rest);
351 print_escaped(stdout, opt->label, rest);
353 if (opt->description) {
356 fprintf(stdout,
"\\");
357 fprintf(stdout,
"\n");
360 fprintf(stdout,
"| ");
361 print_escaped(stdout,
"\t", rest);
362 print_escaped(stdout, opt->description, rest);
367 fprintf(stdout,
"\\");
368 fprintf(stdout,
"\n");
370 fprintf(stdout,
"| ");
371 print_escaped(stdout,
"\t", rest);
372 fprintf(stdout,
"%s: *", _(
"Options"));
373 print_escaped_for_rest_options(stdout, opt->options);
374 fprintf(stdout,
"*");
379 fprintf(stdout,
"\\");
380 fprintf(stdout,
"\n");
382 fprintf(stdout,
"| ");
383 print_escaped(stdout,
"\t", rest);
384 fprintf(stdout,
"%s:", _(
"Default"));
387 fprintf(stdout,
" *");
388 print_escaped(stdout, opt->def, rest);
389 fprintf(stdout,
"*");
395 while (opt->opts[i]) {
398 fprintf(stdout,
"\\");
399 fprintf(stdout,
"\n");
400 char *thumbnails =
NULL;
401 if (opt->gisprompt) {
402 if (strcmp(opt->gisprompt,
"old,colortable,colortable") ==
404 thumbnails =
"colortables";
405 else if (strcmp(opt->gisprompt,
"old,barscale,barscale") ==
407 thumbnails =
"barscales";
408 else if (strcmp(opt->gisprompt,
409 "old,northarrow,northarrow") == 0)
410 thumbnails =
"northarrows";
416 ".. |%s| image:: %s/%s.png\n",
417 opt->opts[i], thumbnails, opt->opts[i]);
418 strcat(image_spec_rest, image_spec);
421 print_escaped(stdout,
"\t\t", rest);
422 fprintf(stdout,
" ", opt->opts[i],
423 thumbnails, opt->opts[i]);
428 fprintf(stdout,
"| ");
429 print_escaped(stdout,
"\t\t", rest);
431 fprintf(stdout,
"\\ ");
435 if (rest && thumbnails) {
436 fprintf(stdout,
"| ");
437 print_escaped(stdout,
"\t\t", rest);
438 fprintf(stdout,
"|%s| ", opt->opts[i]);
441 print_escaped(stdout,
"\t", rest);
442 fprintf(stdout,
"**");
443 print_escaped(stdout, opt->opts[i], rest);
444 fprintf(stdout,
"**: ");
445 print_escaped(stdout, opt->descs[i], rest);
455#define do_escape(c, escaped) \
460void print_escaped(FILE *f,
const char *str,
bool rest)
463 print_escaped_for_rest(f, str);
465 print_escaped_for_md(f, str);
468void print_escaped_for_rest(FILE *f,
const char *str)
472 for (s = str; *s; s++) {
482void print_escaped_for_md(FILE *f,
const char *str)
486 for (s = str; *s; s++) {
489 do_escape(
'\t',
" ");
499void print_escaped_for_rest_options(FILE *f,
const char *str)
503 for (s = str; *s; s++) {
514void print_escaped_for_md_keywords(FILE *f,
const char *str)
523 if (
st->n_keys > 1 && strcmp(
st->module_info.keywords[1], str) == 0) {
528 fprintf(f,
"[%s](topic_", str_s);
529 for (s = str_s; *s; s++) {
536 fprintf(f,
".html)");
539 if (
st->n_keys > 0 && strcmp(
st->module_info.keywords[0], str) == 0) {
543 fprintf(f,
"[%s](", str_s);
544 for (s = str_s; *s; s++) {
551 fprintf(f,
".html)");
557 fprintf(f,
"[%s](keywords.html#%s)", str_s, str_link);
580 usage_rest_md(
FALSE);
void G_free(void *buf)
Free allocated memory.
int G_asprintf(char **out, const char *fmt,...)
void G__print_keywords(FILE *fd, void(*format)(FILE *, const char *), int newline)
Print list of keywords (internal use only)
int G__uses_new_gisprompt(void)
#define do_escape(c, escaped)
Format text for reStructuredText output.
void G__usage_markdown(void)
Print module usage description in Markdown format.
void G__usage_rest(void)
Print module usage description in reStructuredText format.
void print_option(const struct Option *opt, bool rest, char *)
const char * G_program_name(void)
Return module name.
char * G_str_replace(const char *buffer, const char *old_str, const char *new_str)
Replace all occurrences of old_str in buffer with new_str.
char * G_store(const char *s)
Copy string to allocated memory.
void G_strip(char *buf)
Removes all leading and trailing white space from string.