restore categoryFields in the API

This commit is contained in:
Krasimir Angelov
2021-12-29 12:06:29 +01:00
parent dca6611d84
commit 859d6ad5a5
5 changed files with 63 additions and 1 deletions

View File

@@ -2047,6 +2047,38 @@ int pgf_has_linearization(PgfDB *db, PgfConcrRevision revision,
return 0;
}
PGF_API
PgfText **pgf_category_fields(PgfDB *db, PgfConcrRevision revision,
PgfText *name, size_t *p_n_fields,
PgfExn *err)
{
PGF_API_BEGIN {
DB_scope scope(db, READER_SCOPE);
ref<PgfConcr> concr = PgfDB::revision2concr(revision);
ref<PgfConcrLincat> lincat =
namespace_lookup(concr->lincats, name);
if (lincat == 0) {
*p_n_fields = 0;
return NULL;
} else {
size_t n_fields = lincat->fields->len;
PgfText **fields = (PgfText **) malloc(sizeof(PgfText*)*n_fields);
if (fields == 0)
throw pgf_systemerror(ENOMEM);
for (size_t i = 0; i < n_fields; i++) {
fields[i] = textdup(lincat->fields->data[i]);
}
*p_n_fields = n_fields;
return fields;
}
} PGF_API_END
return NULL;
}
PGF_API
PgfText *pgf_linearize(PgfDB *db, PgfConcrRevision revision,
PgfExpr expr, PgfPrintContext *ctxt,

View File

@@ -590,6 +590,11 @@ PGF_API_DECL
int pgf_has_linearization(PgfDB *db, PgfConcrRevision revision,
PgfText *name, PgfExn *err);
PGF_API
PgfText **pgf_category_fields(PgfDB *db, PgfConcrRevision revision,
PgfText *name, size_t *p_n_fields,
PgfExn *err);
#ifdef __cplusplus
struct PgfLinearizationOutputIface
{