diff --git a/source/libs/lilv/lilv-0.16.0/lilv/lilv.h b/source/libs/lilv/lilv-0.16.0/lilv/lilv.h index ff1839f..c780326 100644 --- a/source/libs/lilv/lilv-0.16.0/lilv/lilv.h +++ b/source/libs/lilv/lilv-0.16.0/lilv/lilv.h @@ -1769,6 +1769,25 @@ const LilvNode* lilv_ui_get_binary_uri(const LilvUI* ui); /** + Custom calls +*/ +LILV_API +const LilvNodes* +lilv_ui_get_supported_features(const LilvUI* ui); + +LILV_API +const LilvNodes* +lilv_ui_get_required_features(const LilvUI* ui); + +LILV_API +const LilvNodes* +lilv_ui_get_optional_features(const LilvUI* ui); + +LILV_API +const LilvNodes* +lilv_ui_get_extension_data(const LilvUI* ui); + +/** @} @} */ diff --git a/source/libs/lilv/lilv-0.16.0/lilv/lilvmm.hpp b/source/libs/lilv/lilv-0.16.0/lilv/lilvmm.hpp index 4215ab8..3047930 100644 --- a/source/libs/lilv/lilv-0.16.0/lilv/lilvmm.hpp +++ b/source/libs/lilv/lilv-0.16.0/lilv/lilvmm.hpp @@ -169,6 +169,26 @@ struct Port { const LilvPort* me; }; +struct UI { + inline UI(const LilvUI* c_obj) : me(c_obj) {} + LILV_WRAP_CONVERSION(const LilvUI); + + LILV_WRAP0(Node, ui, get_uri); + LILV_WRAP1(bool, ui, is_a, LilvNode*, ui_class); + LILV_WRAP0(Node, ui, get_bundle_uri); + LILV_WRAP0(Node, ui, get_binary_uri); + LILV_WRAP0(Nodes, ui, get_supported_features); + LILV_WRAP0(Nodes, ui, get_required_features); + LILV_WRAP0(Nodes, ui, get_optional_features); + LILV_WRAP0(Nodes, ui, get_extension_data); + + const LilvUI* me; +}; + +struct UIs { + LILV_WRAP_COLL(UIs, UI, uis); +}; + struct Plugin { inline Plugin(const LilvPlugin* c_obj) : me(c_obj) {} LILV_WRAP_CONVERSION(const LilvPlugin); diff --git a/source/libs/lilv/lilv-0.16.0/src/ui.c b/source/libs/lilv/lilv-0.16.0/src/ui.c index 5d2f066..c2780e0 100644 --- a/source/libs/lilv/lilv-0.16.0/src/ui.c +++ b/source/libs/lilv/lilv-0.16.0/src/ui.c @@ -128,3 +128,59 @@ lilv_ui_get_binary_uri(const LilvUI* ui) assert(ui->binary_uri); return ui->binary_uri; } + +static LilvNodes* +lilv_ui_get_value_internal(const LilvUI* ui, + const SordNode* predicate) +{ + assert(ui); + return lilv_world_find_nodes_internal(ui->world, ui->uri->node, predicate, NULL); +} + +LILV_API +const LilvNodes* +lilv_ui_get_supported_features(const LilvUI* ui) +{ + assert(ui); + LilvNodes* optional = lilv_ui_get_optional_features(ui); + LilvNodes* required = lilv_ui_get_required_features(ui); + LilvNodes* result = lilv_nodes_new(); + + LILV_FOREACH(nodes, i, optional) + zix_tree_insert((ZixTree*)result, lilv_node_duplicate(lilv_nodes_get(optional, i)), NULL); + + LILV_FOREACH(nodes, i, required) + zix_tree_insert((ZixTree*)result, lilv_node_duplicate(lilv_nodes_get(required, i)), NULL); + + lilv_nodes_free(optional); + lilv_nodes_free(required); + + return result; +} + +LILV_API +const LilvNodes* +lilv_ui_get_required_features(const LilvUI* ui) +{ + assert(ui); + assert(ui->world); + return lilv_ui_get_value_internal(ui, ui->world->uris.lv2_requiredFeature); +} + +LILV_API +const LilvNodes* +lilv_ui_get_optional_features(const LilvUI* ui) +{ + assert(ui); + assert(ui->world); + return lilv_ui_get_value_internal(ui, ui->world->uris.lv2_optionalFeature); +} + +LILV_API +const LilvNodes* +lilv_ui_get_extension_data(const LilvUI* ui) +{ + assert(ui); + assert(ui->world); + return lilv_ui_get_value_internal(ui, ui->world->uris.lv2_extensionData); +}