Skip to content

sample/example_help_formatter.c

#include <stdio.h>
#include <stdlib.h>

#include "argparse-c.h"

static int print_text(const char *label, char *text) {
  if (!text) {
    fprintf(stderr, "failed to format help for %s\n", label);
    return 1;
  }

  printf("=== %s ===\n", label);
  printf("%s\n", text);
  free(text);
  return 0;
}

int main(void) {
  ap_error err = {0};
  ap_parser_options options = ap_parser_options_default();
  ap_parser *parser = NULL;
  ap_arg_options mode = ap_arg_options_default();
  char *help = NULL;

  options.help_formatter_mode = AP_HELP_FORMATTER_STANDARD;
  parser = ap_parser_new_with_options("example_help_formatter",
                                       "switchable help formatter demo",
                                       options);
  if (!parser) {
    fprintf(stderr, "failed to initialize parser\n");
    return 1;
  }

  mode.help = "execution mode";
  mode.default_value = "fast";
  if (ap_add_argument(parser, "--mode", mode, &err) != 0) {
    fprintf(stderr, "%s\n", err.message);
    ap_parser_free(parser);
    return 1;
  }

  help = ap_format_help(parser);
  if (print_text("standard", help) != 0) {
    ap_parser_free(parser);
    return 1;
  }

  ap_parser_free(parser);
  options.help_formatter_mode = AP_HELP_FORMATTER_SHOW_DEFAULTS;
  parser = ap_parser_new_with_options("example_help_formatter",
                                       "switchable help formatter demo",
                                       options);
  if (!parser) {
    fprintf(stderr, "failed to initialize parser\n");
    return 1;
  }
  if (ap_add_argument(parser, "--mode", mode, &err) != 0) {
    fprintf(stderr, "%s\n", err.message);
    ap_parser_free(parser);
    return 1;
  }

  help = ap_format_help(parser);
  if (print_text("show_defaults", help) != 0) {
    ap_parser_free(parser);
    return 1;
  }

  ap_parser_free(parser);
  options.help_formatter_mode = AP_HELP_FORMATTER_RAW_TEXT;
  parser = ap_parser_new_with_options("example_help_formatter",
                                       "switchable help formatter demo",
                                       options);
  if (!parser) {
    fprintf(stderr, "failed to initialize parser\n");
    return 1;
  }
  if (ap_add_argument(parser, "--mode", mode, &err) != 0) {
    fprintf(stderr, "%s\n", err.message);
    ap_parser_free(parser);
    return 1;
  }

  help = ap_format_help(parser);
  if (print_text("raw_text", help) != 0) {
    ap_parser_free(parser);
    return 1;
  }

  ap_parser_free(parser);
  return 0;
}