From 662a35bbb3724edab3647937411a079f52bd59c6 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Fri, 16 Aug 2013 12:54:16 +0000 Subject: [PATCH] provide API to access the language code for the concrete language --- src/runtime/c/pgf/pgf.c | 23 +++++++++++++++++++++++ src/runtime/c/pgf/pgf.h | 3 +++ src/runtime/python/pypgf.c | 10 ++++++++++ 3 files changed, 36 insertions(+) diff --git a/src/runtime/c/pgf/pgf.c b/src/runtime/c/pgf/pgf.c index dc2ed7290..a03759314 100644 --- a/src/runtime/c/pgf/pgf.c +++ b/src/runtime/c/pgf/pgf.c @@ -145,6 +145,29 @@ pgf_start_cat(PgfPGF* pgf, GuPool* pool) return gu_str_string("S", pool); } +GuString +pgf_language_code(PgfConcr* concr) +{ + GuPool* tmp_pool = gu_local_pool(); + + GuString s = gu_str_string("language", tmp_pool); + PgfLiteral lit = + gu_map_get(concr->cflags, &s, PgfLiteral); + + if (gu_variant_is_null(lit)) + return gu_empty_string; + + GuVariantInfo i = gu_variant_open(lit); + switch (i.tag) { + case PGF_LITERAL_STR: { + PgfLiteralStr *lstr = (PgfLiteralStr *) i.data; + return lstr->val; + } + } + + return gu_empty_string; +} + void pgf_iter_functions(PgfPGF* pgf, GuMapItor* fn, GuExn* err) { diff --git a/src/runtime/c/pgf/pgf.h b/src/runtime/c/pgf/pgf.h index fe86373cf..a575a5188 100644 --- a/src/runtime/c/pgf/pgf.h +++ b/src/runtime/c/pgf/pgf.h @@ -95,6 +95,9 @@ pgf_get_language(PgfPGF*, PgfCId lang); GuString pgf_concrete_name(PgfConcr*); +GuString +pgf_language_code(PgfConcr* concr); + void pgf_iter_categories(PgfPGF* pgf, GuMapItor* fn, GuExn* err); diff --git a/src/runtime/python/pypgf.c b/src/runtime/python/pypgf.c index d54dd14ad..fd2b39906 100644 --- a/src/runtime/python/pypgf.c +++ b/src/runtime/python/pypgf.c @@ -1654,6 +1654,12 @@ Concr_getName(ConcrObject *self, void *closure) return gu2py_string(pgf_concrete_name(self->concr)); } +static PyObject* +Concr_getLanguageCode(ConcrObject *self, void *closure) +{ + return gu2py_string(pgf_language_code(self->concr)); +} + static PyObject* Concr_graphvizParseTree(ConcrObject* self, PyObject *args) { ExprObject* pyexpr; @@ -1683,6 +1689,10 @@ static PyGetSetDef Concr_getseters[] = { (getter)Concr_getName, NULL, "the name of the concrete syntax", }, + {"languageCode", + (getter)Concr_getLanguageCode, NULL, + "the language code for this concrete syntax", + }, {NULL} /* Sentinel */ };