Lines Matching defs:parser

200   argp_parser_t parser;
210 /* The number of non-option args sucessfully handled by this parser. */
213 /* This group's parser's parent's group. */
218 calling this group's parser. */
223 /* Call GROUP's parser with KEY and ARG, swapping any group-specific info
225 no parser, EBADKEY is returned. */
229 if (group->parser)
236 err = (*group->parser)(key, arg, state);
245 struct parser
274 /* Memory used by this parser. */
279 /* The next usable entries in the various parser tables being filled in by
283 struct parser *parser;
302 if (real || argp->parser)
330 && find_long_option (cvt->parser->long_opts, opt->name) < 0)
349 + (((group - cvt->parser->groups) + 1) << USER_BITS);
357 group->parser = argp->parser;
396 parser_convert (struct parser *parser, const struct argp *argp, int flags)
400 cvt.parser = parser;
401 cvt.short_end = parser->short_opts;
402 cvt.long_end = parser->long_opts;
403 cvt.child_inputs_end = parser->child_inputs;
413 parser->argp = argp;
416 parser->egroup = convert_options (argp, 0, 0, parser->groups, &cvt);
418 parser->egroup = parser->groups; /* No parsers at all! */
422 /* Lengths of various parser fields which we will allocated. */
441 if (opt || argp->parser)
464 parser_init (struct parser *parser, const struct argp *argp,
501 parser->storage = malloc (ssum);
502 if (! parser->storage)
505 storage = parser->storage;
506 parser->groups = parser->storage;
507 parser->child_inputs = (void **) (storage + gsum);
508 parser->long_opts = (struct option *) (storage + csum);
509 parser->short_opts = storage + lsum;
510 parser->opt_data = opt_data;
512 memset (parser->child_inputs, 0, clen);
513 parser_convert (parser, argp, flags);
515 memset (&parser->state, 0, sizeof (struct argp_state));
516 parser->state.root_argp = parser->argp;
517 parser->state.argc = argc;
518 parser->state.argv = argv;
519 parser->state.flags = flags;
520 parser->state.err_stream = stderr;
521 parser->state.out_stream = stdout;
522 parser->state.next = 0; /* Tell getopt to initialize. */
523 parser->state.pstate = parser;
525 parser->try_getopt = 1;
527 /* Call each parser for the first time, giving it a chance to propagate
529 if (parser->groups < parser->egroup)
530 parser->groups->input = input;
531 for (group = parser->groups;
532 group < parser->egroup && (!err || err == EBADKEY);
536 /* If a child parser, get the initial input value from the parent. */
539 if (!group->parser
546 err = group_parse (group, &parser->state, ARGP_KEY_INIT, 0);
549 err = 0; /* Some parser didn't understand. */
554 if (parser->state.flags & ARGP_NO_ERRS)
556 parser->opt_data.opterr = 0;
557 if (parser->state.flags & ARGP_PARSE_ARGV0)
560 parser->state.argv--, parser->state.argc++;
563 parser->opt_data.opterr = 1; /* Print error messages. */
565 if (parser->state.argv == argv && argv[0])
567 parser->state.name = __argp_base_name (argv[0]);
569 parser->state.name = __argp_short_program_name ();
577 parser_finalize (struct parser *parser,
588 if (parser->state.next == parser->state.argc)
592 for (group = parser->groups;
593 group < parser->egroup && (!err || err==EBADKEY);
596 err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0);
597 for (group = parser->egroup - 1;
598 group >= parser->groups && (!err || err==EBADKEY);
600 err = group_parse (group, &parser->state, ARGP_KEY_END, 0);
603 err = 0; /* Some parser didn't understand. */
607 *end_index = parser->state.next;
611 *end_index = parser->state.next;
615 if (!(parser->state.flags & ARGP_NO_ERRS)
616 && parser->state.err_stream)
617 fprintf (parser->state.err_stream,
618 dgettext (parser->argp->argp_domain,
620 parser->state.name);
634 __argp_state_help (&parser->state, parser->state.err_stream,
637 /* Since we didn't exit, give each parser an error indication. */
638 for (group = parser->groups; group < parser->egroup; group++)
639 group_parse (group, &parser->state, ARGP_KEY_ERROR, 0);
647 for (group = parser->egroup - 1
648 ; group >= parser->groups && (!err || err == EBADKEY)
650 err = group_parse (group, &parser->state, ARGP_KEY_SUCCESS, 0);
652 err = 0; /* Some parser didn't understand. */
656 for (group = parser->egroup - 1; group >= parser->groups; group--)
657 group_parse (group, &parser->state, ARGP_KEY_FINI, 0);
662 free (parser->storage);
674 parser_parse_arg (struct parser *parser, char *val)
678 int index = --parser->state.next;
683 /* Try to parse the argument in each parser. */
684 for (group = parser->groups
685 ; group < parser->egroup && err == EBADKEY
688 parser->state.next++; /* For ARGP_KEY_ARG, consume the arg. */
690 err = group_parse (group, &parser->state, key, val);
693 /* This parser doesn't like ARGP_KEY_ARG; try ARGP_KEY_ARGS instead. */
695 parser->state.next--; /* For ARGP_KEY_ARGS, put back the arg. */
697 err = group_parse (group, &parser->state, key, 0);
707 parser->state.next = parser->state.argc;
709 if (parser->state.next > index)
713 (--group)->args_processed += (parser->state.next - index);
716 parser->try_getopt = 1;
726 parser_parse_opt (struct parser *parser, int opt, char *val)
739 char *short_index = strchr (parser->short_opts, opt);
742 for (group = parser->groups; group < parser->egroup; group++)
745 err = group_parse (group, &parser->state, opt,
746 parser->opt_data.optarg);
754 group_parse (&parser->groups[group_key - 1], &parser->state,
756 parser->opt_data.optarg);
760 parser, because we pre-compute which parser is supposed to deal
766 __argp_error (&parser->state, "-%c: %s", opt,
767 dgettext (parser->argp->argp_domain, bad_key_err));
770 struct option *long_opt = parser->long_opts;
773 __argp_error (&parser->state, "--%s: %s",
775 dgettext (parser->argp->argp_domain, bad_key_err));
788 parser_parse_next (struct parser *parser, int *arg_ebadkey)
793 if (parser->state.quoted && parser->state.next < parser->state.quoted)
798 parser->state.quoted = 0;
800 if (parser->try_getopt && !parser->state.quoted)
804 parser->opt_data.optind = parser->state.next;
806 parser->opt_data.optopt = KEY_END;
807 if (parser->state.flags & ARGP_LONG_ONLY)
808 opt = _getopt_long_only_r (parser->state.argc, parser->state.argv,
809 parser->short_opts, parser->long_opts, 0,
810 &parser->opt_data);
812 opt = _getopt_long_r (parser->state.argc, parser->state.argv,
813 parser->short_opts, parser->long_opts, 0,
814 &parser->opt_data);
816 parser->state.next = parser->opt_data.optind;
822 parser->try_getopt = 0;
823 if (parser->state.next > 1
824 && strcmp (parser->state.argv[parser->state.next - 1], QUOTE)
830 parser->state.quoted = parser->state.next;
832 else if (opt == KEY_ERR && parser->opt_data.optopt != KEY_END)
847 if (parser->state.next >= parser->state.argc
848 || (parser->state.flags & ARGP_NO_ARGS))
858 parser->opt_data.optarg = parser->state.argv[parser->state.next++];
863 /* A non-option argument; try each parser in turn. */
864 err = parser_parse_arg (parser, parser->opt_data.optarg);
866 err = parser_parse_opt (parser, opt, parser->opt_data.optarg);
878 unknown option is present, EINVAL is returned; if some parser routine
885 struct parser parser;
928 /* Construct a parser for these arguments. */
929 err = parser_init (&parser, argp, argc, argv, flags, input);
935 err = parser_parse_next (&parser, &arg_ebadkey);
936 err = parser_finalize (&parser, err, arg_ebadkey, end_index);
946 /* Return the input field for ARGP in the parser corresponding to STATE; used
954 struct parser *parser = state->pstate;
956 for (group = parser->groups; group < parser->egroup; group++)