summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/pgf.c
diff options
context:
space:
mode:
authorInari Listenmaa <inari.listenmaa@gmail.com>2017-10-04 15:01:36 +0200
committerInari Listenmaa <inari.listenmaa@gmail.com>2017-10-04 15:01:36 +0200
commit1e3272b00e743541a4a47be3220fe90f766accb3 (patch)
tree65bbe804e9997669982550859178e69b64f27968 /src/runtime/c/pgf/pgf.c
parent8eef0b537674dc8069b27d7776bd36dd9924da6e (diff)
parente3aa392e63b0d0f314b286d207cd187be5837ad8 (diff)
Merge remote-tracking branch 'origin/master' into basque
Diffstat (limited to 'src/runtime/c/pgf/pgf.c')
-rw-r--r--src/runtime/c/pgf/pgf.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/runtime/c/pgf/pgf.c b/src/runtime/c/pgf/pgf.c
index 7e519cbbf..5317830fb 100644
--- a/src/runtime/c/pgf/pgf.c
+++ b/src/runtime/c/pgf/pgf.c
@@ -140,6 +140,29 @@ pgf_start_cat(PgfPGF* pgf, GuPool* pool)
return type;
}
+PGF_API PgfHypos*
+pgf_category_context(PgfPGF *gr, PgfCId catname)
+{
+ PgfAbsCat* abscat =
+ gu_seq_binsearch(gr->abstract.cats, pgf_abscat_order, PgfAbsCat, catname);
+ if (abscat == NULL) {
+ return NULL;
+ }
+
+ return abscat->context;
+}
+
+PGF_API prob_t
+pgf_category_prob(PgfPGF* pgf, PgfCId catname)
+{
+ PgfAbsCat* abscat =
+ gu_seq_binsearch(pgf->abstract.cats, pgf_abscat_order, PgfAbsCat, catname);
+ if (abscat == NULL)
+ return INFINITY;
+
+ return abscat->prob;
+}
+
PGF_API GuString
pgf_language_code(PgfConcr* concr)
{
@@ -173,7 +196,7 @@ pgf_iter_functions(PgfPGF* pgf, GuMapItor* itor, GuExn* err)
}
PGF_API void
-pgf_iter_functions_by_cat(PgfPGF* pgf, PgfCId catname,
+pgf_iter_functions_by_cat(PgfPGF* pgf, PgfCId catname,
GuMapItor* itor, GuExn* err)
{
size_t n_funs = gu_seq_length(pgf->abstract.funs);
@@ -199,7 +222,17 @@ pgf_function_type(PgfPGF* pgf, PgfCId funname)
return absfun->type;
}
-PGF_API double
+PGF_API_DECL bool
+pgf_function_is_constructor(PgfPGF* pgf, PgfCId funname)
+{
+ PgfAbsFun* absfun =
+ gu_seq_binsearch(pgf->abstract.funs, pgf_absfun_order, PgfAbsFun, funname);
+ if (absfun == NULL)
+ return false;
+ return (absfun->defns == NULL);
+}
+
+PGF_API prob_t
pgf_function_prob(PgfPGF* pgf, PgfCId funname)
{
PgfAbsFun* absfun =