static int gt_gff3validator_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GFF3ValidatorArguments *arguments = tool_arguments; GtTypeChecker *type_checker = NULL; GtXRFChecker *xrf_checker = NULL; GtNodeStream *gff3_in_stream; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* create a GFF3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); gt_gff3_in_stream_check_id_attributes((GtGFF3InStream*) gff3_in_stream); /* set different type checker if necessary */ if (gt_typecheck_info_option_used(arguments->tci)) { type_checker = gt_typecheck_info_create_type_checker(arguments->tci, err); if (!type_checker) had_err = -1; if (!had_err) gt_gff3_in_stream_set_type_checker(gff3_in_stream, type_checker); } /* set XRF checker */ if (gt_xrfcheck_info_option_used(arguments->xci)) { xrf_checker = gt_xrfcheck_info_create_xrf_checker(arguments->xci, err); if (!xrf_checker) had_err = -1; if (!had_err) gt_gff3_in_stream_set_xrf_checker(gff3_in_stream, xrf_checker); } /* enable strict mode (if necessary) */ if (!had_err && arguments->strict) gt_gff3_in_stream_enable_strict_mode((GtGFF3InStream*) gff3_in_stream); /* pull the features through the stream and free them afterwards */ if (!had_err) had_err = gt_node_stream_pull(gff3_in_stream, err); if (!had_err) printf("input is valid GFF3\n"); /* free */ gt_node_stream_delete(gff3_in_stream); gt_type_checker_delete(type_checker); gt_xrf_checker_delete(xrf_checker); return had_err; }
static int gt_gff3_runner(int argc, const char **argv, int parsed_args, void *tool_arguments, GtError *err) { GFF3Arguments *arguments = tool_arguments; GtTypeChecker *type_checker = NULL; GtXRFChecker *xrf_checker = NULL; GtNodeStream *gff3_in_stream, *sort_stream = NULL, *load_stream = NULL, *merge_feature_stream = NULL, *add_introns_stream = NULL, *set_source_stream = NULL, *gff3_out_stream = NULL, *last_stream; int had_err = 0; gt_error_check(err); gt_assert(arguments); /* create a gff3 input stream */ gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args, argv + parsed_args); if (arguments->verbose && arguments->outfp) gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream); if (arguments->checkids) gt_gff3_in_stream_check_id_attributes((GtGFF3InStream*) gff3_in_stream); if (!arguments->addids) gt_gff3_in_stream_disable_add_ids(gff3_in_stream); last_stream = gff3_in_stream; /* set different type checker if necessary */ if (gt_typecheck_info_option_used(arguments->tci)) { type_checker = gt_typecheck_info_create_type_checker(arguments->tci, err); if (!type_checker) had_err = -1; if (!had_err) gt_gff3_in_stream_set_type_checker(gff3_in_stream, type_checker); } /* set XRF checker if necessary */ if (gt_xrfcheck_info_option_used(arguments->xci)) { xrf_checker = gt_xrfcheck_info_create_xrf_checker(arguments->xci, err); if (!xrf_checker) had_err = -1; if (!had_err) gt_gff3_in_stream_set_xrf_checker(gff3_in_stream, xrf_checker); } /* set offset (if necessary) */ if (!had_err && arguments->offset != GT_UNDEF_WORD) gt_gff3_in_stream_set_offset(gff3_in_stream, arguments->offset); /* set offsetfile (if necessary) */ if (!had_err && gt_str_length(arguments->offsetfile)) { had_err = gt_gff3_in_stream_set_offsetfile(gff3_in_stream, arguments->offsetfile, err); } /* enable strict mode (if necessary) */ if (!had_err && arguments->strict) gt_gff3_in_stream_enable_strict_mode((GtGFF3InStream*) gff3_in_stream); /* enable tidy mode (if necessary) */ if (!had_err && arguments->tidy) gt_gff3_in_stream_enable_tidy_mode((GtGFF3InStream*) gff3_in_stream); if (!had_err && arguments->fixboundaries) gt_gff3_in_stream_fix_region_boundaries((GtGFF3InStream*) gff3_in_stream); /* create load stream (if necessary) */ if (!had_err && arguments->load) { load_stream = gt_load_stream_new(last_stream); last_stream = load_stream; } /* create sort stream (if necessary) */ if (!had_err && (arguments->sort || arguments->sortlines || arguments->sortnum)) { sort_stream = gt_sort_stream_new(last_stream); last_stream = sort_stream; } /* create merge feature stream (if necessary) */ if (!had_err && arguments->mergefeat) { gt_assert(sort_stream); merge_feature_stream = gt_merge_feature_stream_new(sort_stream); last_stream = merge_feature_stream; } /* create addintrons stream (if necessary) */ if (!had_err && arguments->addintrons) { gt_assert(last_stream); add_introns_stream = gt_add_introns_stream_new(last_stream); last_stream = add_introns_stream; } /* create setsource stream (if necessary) */ if (!had_err && gt_str_length(arguments->newsource) > 0) { gt_assert(last_stream); GtNodeVisitor *ssv = gt_set_source_visitor_new(arguments->newsource); set_source_stream = gt_visitor_stream_new(last_stream, ssv); last_stream = set_source_stream; } /* create gff3 output stream */ if (!had_err && arguments->show) { if (arguments->sortlines) { gff3_out_stream = gt_gff3_linesorted_out_stream_new(last_stream, arguments->outfp); gt_gff3_linesorted_out_stream_set_fasta_width( (GtGFF3LinesortedOutStream*) gff3_out_stream, arguments->width); if (arguments->retainids) gt_gff3_linesorted_out_stream_retain_id_attributes( (GtGFF3LinesortedOutStream*) gff3_out_stream); } else if (arguments->sortnum) { gff3_out_stream = gt_gff3_numsorted_out_stream_new(last_stream, arguments->outfp); gt_gff3_numsorted_out_stream_set_fasta_width( (GtGFF3NumsortedOutStream*) gff3_out_stream, arguments->width); if (arguments->retainids) gt_gff3_numsorted_out_stream_retain_id_attributes( (GtGFF3NumsortedOutStream*) gff3_out_stream); } else { gff3_out_stream = gt_gff3_out_stream_new(last_stream, arguments->outfp); gt_gff3_out_stream_set_fasta_width((GtGFF3OutStream*) gff3_out_stream, arguments->width); if (arguments->retainids) gt_gff3_out_stream_retain_id_attributes((GtGFF3OutStream*) gff3_out_stream); } gt_assert(gff3_out_stream); last_stream = gff3_out_stream; } /* pull the features through the stream and free them afterwards */ if (!had_err) had_err = gt_node_stream_pull(last_stream, err); /* free */ gt_node_stream_delete(gff3_out_stream); gt_node_stream_delete(sort_stream); gt_node_stream_delete(load_stream); gt_node_stream_delete(merge_feature_stream); gt_node_stream_delete(add_introns_stream); gt_node_stream_delete(set_source_stream); gt_node_stream_delete(gff3_in_stream); gt_type_checker_delete(type_checker); gt_xrf_checker_delete(xrf_checker); return had_err; }