diff --git a/src/hammer.c b/src/hammer.c index ba4928e62099bb47a29804287040b7bebb3c0c6d..78279bab8d602ec7dd2f1dd5899ea1e72a0a9750 100644 --- a/src/hammer.c +++ b/src/hammer.c @@ -295,6 +295,29 @@ static char * h_get_backend_text_with_no_params(HAllocator *mm__, return text; } +/* Query a backend by short name; return PB_INVALID if no match */ + +HParserBackend h_query_backend_by_name(const char *name) { + HParserBackend result = PB_INVALID, i; + + if (name != NULL) { + /* Okay, iterate over the backends PB_MIN <= i <= PB_MAX and check */ + i = PB_MIN; + do { + if (i != PB_INVALID) { + if (backends[i]->backend_short_name != NULL) { + if (strcmp(name, backends[i]->backend_short_name) == 0) { + result = i; + } + } + } + ++i; + } while (i <= PB_MAX && result == PB_INVALID); + } + + return result; +} + char * h_get_description_with_no_params(HAllocator *mm__, HParserBackend be, void *params) { return h_get_backend_text_with_no_params(mm__, be, 1); diff --git a/src/hammer.h b/src/hammer.h index 687592943102c30bd9794a00f20784a5017b9bb1..2efa75b5d2e097982bc88b8fe41f66711db62cbf 100644 --- a/src/hammer.h +++ b/src/hammer.h @@ -340,6 +340,13 @@ const char * h_get_descriptive_text_for_backend(HParserBackend be); HAMMER_FN_DECL(char *, h_get_descriptive_text_for_backend_with_params, HParserBackendWithParams *be_with_params); +/** + * Look up an HParserBackend by name; this should round-trip with + * h_get_name_for_backend(). + */ + +HParserBackend h_query_backend_by_name(const char *name); + /** * Top-level function to call a parser that has been built over some * piece of input (of known size).