|
|
@@ -160,3 +160,54 @@ lilv_ui_get_extension_data(const LilvUI* ui) |
|
|
|
assert(ui->world); |
|
|
|
return lilv_ui_get_value_internal(ui, ui->world->uris.lv2_extensionData); |
|
|
|
} |
|
|
|
|
|
|
|
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); |
|
|
|
} |