23 #include <sys/types.h>
25 #if defined(HAVE_LANGINFO_H)
28 #if defined(__MINGW32__) && defined(USE_NLS)
29 #include <localcharset.h>
39 #include "parser_local_proto.h"
42 static const char *src_enc;
51 static void print_escaped_for_xml(FILE *fp,
const char *str)
54 iconv_t conv = iconv_open(
"UTF-8", src_enc);
57 if (conv != (iconv_t)-1) {
58 char *
src = (
char *)str;
59 size_t srclen = strlen(
src);
60 size_t dstlen = srclen * 4 + 1;
66 ret = iconv(conv, (
char **)&
src, &srclen, &
dst, &dstlen);
67 if (ret != (
size_t)-1 && srclen == 0) {
95 if (conv != (iconv_t)-1)
110 const char *encoding =
NULL;
119 #if defined(HAVE_LANGINFO_H)
120 encoding = nl_langinfo(CODESET);
121 #elif defined(_WIN32) && defined(USE_NLS)
122 encoding = locale_charset();
125 if (!encoding || strlen(encoding) == 0)
138 fprintf(stdout,
"<?xml version=\"1.0\" encoding=\"%s\"?>\n", encoding);
139 fprintf(stdout,
"<!DOCTYPE task SYSTEM \"grass-interface.dtd\">\n");
141 fprintf(stdout,
"<task name=\"%s\">\n",
st->pgm_name);
143 if (
st->module_info.label) {
144 fprintf(stdout,
"\t<label>\n\t\t");
145 print_escaped_for_xml(stdout,
st->module_info.label);
146 fprintf(stdout,
"\n\t</label>\n");
149 if (
st->module_info.description) {
150 fprintf(stdout,
"\t<description>\n\t\t");
151 print_escaped_for_xml(stdout,
st->module_info.description);
152 fprintf(stdout,
"\n\t</description>\n");
155 if (
st->module_info.keywords) {
156 fprintf(stdout,
"\t<keywords>\n\t\t");
158 fprintf(stdout,
"\n\t</keywords>\n");
171 opt = &
st->first_option;
172 while (opt !=
NULL) {
193 "multiple=\"%s\">\n",
198 fprintf(stdout,
"\t\t<label>\n\t\t\t");
199 print_escaped_for_xml(stdout, opt->
label);
200 fprintf(stdout,
"\n\t\t</label>\n");
204 fprintf(stdout,
"\t\t<description>\n\t\t\t");
206 fprintf(stdout,
"\n\t\t</description>\n");
210 fprintf(stdout,
"\t\t<keydesc>\n");
213 s = strtok(top,
",");
214 for (i = 1; s !=
NULL; i++) {
215 fprintf(stdout,
"\t\t\t<item order=\"%d\">", i);
216 print_escaped_for_xml(stdout, s);
217 fprintf(stdout,
"</item>\n");
218 s = strtok(
NULL,
",");
220 fprintf(stdout,
"\t\t</keydesc>\n");
225 const char *atts[] = {
"age",
"element",
"prompt",
NULL};
228 s = strtok(top,
",");
229 fprintf(stdout,
"\t\t<gisprompt ");
230 for (i = 0; s !=
NULL && atts[i] !=
NULL; i++) {
231 fprintf(stdout,
"%s=\"%s\" ", atts[i], s);
232 s = strtok(
NULL,
",");
234 fprintf(stdout,
"/>\n");
239 fprintf(stdout,
"\t\t<default>\n\t\t\t");
240 print_escaped_for_xml(stdout, opt->
def);
241 fprintf(stdout,
"\n\t\t</default>\n");
250 fprintf(stdout,
"\t\t<values>\n");
251 while (opt->
opts[i]) {
252 fprintf(stdout,
"\t\t\t<value>\n");
253 fprintf(stdout,
"\t\t\t\t<name>");
254 print_escaped_for_xml(stdout, opt->
opts[i]);
255 fprintf(stdout,
"</name>\n");
257 fprintf(stdout,
"\t\t\t\t<description>");
258 print_escaped_for_xml(stdout, opt->
descs[i]);
259 fprintf(stdout,
"</description>\n");
261 fprintf(stdout,
"\t\t\t</value>\n");
264 fprintf(stdout,
"\t\t</values>\n");
267 fprintf(stdout,
"\t\t<guisection>\n\t\t\t");
268 print_escaped_for_xml(stdout, opt->
guisection);
269 fprintf(stdout,
"\n\t\t</guisection>\n");
272 fprintf(stdout,
"\t\t<guidependency>\n\t\t\t");
274 fprintf(stdout,
"\n\t\t</guidependency>\n");
282 fprintf(stdout,
"\t</parameter>\n");
287 flag = &
st->first_flag;
288 while (flag !=
NULL) {
289 fprintf(stdout,
"\t<flag name=\"%c\">\n", flag->
key);
292 fprintf(stdout,
"\t\t<label>\n\t\t\t");
293 print_escaped_for_xml(stdout, flag->
label);
294 fprintf(stdout,
"\n\t\t</label>\n");
298 fprintf(stdout,
"\t\t<suppress_required/>\n");
301 fprintf(stdout,
"\t\t<description>\n\t\t\t");
303 fprintf(stdout,
"\n\t\t</description>\n");
306 fprintf(stdout,
" \t\t<guisection>\n\t\t\t");
307 print_escaped_for_xml(stdout, flag->
guisection);
308 fprintf(stdout,
"\n\t\t</guisection>\n");
311 fprintf(stdout,
"\t</flag>\n");
326 fprintf(stdout,
"\t<flag name=\"%s\">\n",
"overwrite");
327 fprintf(stdout,
"\t\t<description>\n\t\t\t");
328 print_escaped_for_xml(
329 stdout,
_(
"Allow output files to overwrite existing files"));
330 fprintf(stdout,
"\n\t\t</description>\n");
331 fprintf(stdout,
"\t</flag>\n");
335 fprintf(stdout,
"\t<flag name=\"%s\">\n",
"help");
336 fprintf(stdout,
"\t\t<description>\n\t\t\t");
337 print_escaped_for_xml(stdout,
_(
"Print usage summary"));
338 fprintf(stdout,
"\n\t\t</description>\n");
339 fprintf(stdout,
"\t</flag>\n");
342 fprintf(stdout,
"\t<flag name=\"%s\">\n",
"verbose");
343 fprintf(stdout,
"\t\t<description>\n\t\t\t");
344 print_escaped_for_xml(stdout,
_(
"Verbose module output"));
345 fprintf(stdout,
"\n\t\t</description>\n");
346 fprintf(stdout,
"\t</flag>\n");
349 fprintf(stdout,
"\t<flag name=\"%s\">\n",
"quiet");
350 fprintf(stdout,
"\t\t<description>\n\t\t\t");
351 print_escaped_for_xml(stdout,
_(
"Quiet module output"));
352 fprintf(stdout,
"\n\t\t</description>\n");
353 fprintf(stdout,
"\t</flag>\n");
357 fprintf(stdout,
"</task>\n");
void G_free(void *)
Free allocated memory.
const char * G_program_name(void)
Return module name.
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)
void G__describe_option_rules_xml(FILE *fp)
Describe option rules in XML format (internal use only)
void G__usage_xml(void)
Print module usage description in XML format.
Structure that stores flag info.
Structure that stores option information.
const char * guidependency