def make_parser(add_help=True, exclude_args=None):
    if exclude_args is None:
        exclude_args = []
    parser = argparse.ArgumentParser(add_help=add_help)
    parser.description = ("Filter, transform and export a list of JSON "
                          "objects on stdin to JSON or CSV on stdout")
    if "--columns" not in exclude_args:
        parser.add_argument(
            "--columns", dest="columns_file",
            help="the JSON file specifying the columns to be output",
        )
    if ("-i" not in exclude_args) and ("--input" not in exclude_args):
        parser.add_argument(
            "-i", "--input",
            help="read input from the given file instead of from stdin",
            dest='input_data',
        )
    if ("-c" not in exclude_args) and ("--column" not in exclude_args):
        parser.add_argument("-c", "--column", action=ColumnsAction)
    if "--pattern" not in exclude_args:
        parser.add_argument("--pattern", action=ColumnsAction, nargs='+')
    if "--max-length" not in exclude_args:
        parser.add_argument("--max-length", action=ColumnsAction)
    if "--strip" not in exclude_args:
        parser.add_argument("--strip", nargs="?", action=ColumnsAction)
    if "--deduplicate" not in exclude_args:
        parser.add_argument("--deduplicate", nargs='?', action=ColumnsAction)
    if "--case-sensitive" not in exclude_args:
        parser.add_argument(
            "--case-sensitive", nargs='?', action=ColumnsAction)
    if "--unique" not in exclude_args:
        parser.add_argument("--unique", nargs="?", action=ColumnsAction)
    if ("-p" not in exclude_args) and ("--pretty" not in exclude_args):
        parser.add_argument("-p", "--pretty", action="store_true")
    return parser