summaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-08-16 12:54:16 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-08-16 12:54:16 +0000
commit662a35bbb3724edab3647937411a079f52bd59c6 (patch)
tree9eb57d63e20a63c975d3217b130b69d1d27d8b94 /src/runtime
parent1e44fdb3d3413709ae635f0fae91ffa4a93a2d9d (diff)
provide API to access the language code for the concrete language
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/c/pgf/pgf.c23
-rw-r--r--src/runtime/c/pgf/pgf.h3
-rw-r--r--src/runtime/python/pypgf.c10
3 files changed, 36 insertions, 0 deletions
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
@@ -1655,6 +1655,12 @@ Concr_getName(ConcrObject *self, void *closure)
}
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;
if (!PyArg_ParseTuple(args, "O!", &pgf_ExprType, &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 */
};