summaryrefslogtreecommitdiffstats
path: root/src/port.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-11-08 19:53:30 +0000
committerDavid Robillard <d@drobilla.net>2008-11-08 19:53:30 +0000
commit0ff919f9b56903952aa76cd0315ccb808a7bd59c (patch)
treedca34d4f06f74fdea189e36f256dec071c9e4d0d /src/port.c
parentf6e5dcc1a59c4d4103718d3dbf3ee77096eeaa88 (diff)
downloadlilv-0ff919f9b56903952aa76cd0315ccb808a7bd59c.tar.gz
lilv-0ff919f9b56903952aa76cd0315ccb808a7bd59c.tar.bz2
lilv-0ff919f9b56903952aa76cd0315ccb808a7bd59c.zip
Support i18n literals via LANG environment variable.
Apply patch from larsl (ticket #186). git-svn-id: http://svn.drobilla.net/lad/trunk/slv2@1705 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/port.c')
-rw-r--r--src/port.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/port.c b/src/port.c
index 5641de4..7fd3ede 100644
--- a/src/port.c
+++ b/src/port.c
@@ -141,7 +141,8 @@ slv2_port_get_value_by_qname(SLV2Plugin p,
"SELECT DISTINCT ?value WHERE {\n"
"<", slv2_value_as_uri(p->plugin_uri), "> lv2:port ?port .\n"
"?port lv2:symbol \"", slv2_value_as_string(port->symbol), "\";\n\t",
- property, " ?value .\n}", NULL);
+ property, " ?value .\n"
+ "FILTER(lang(?value) = \"\") }", NULL);
results = slv2_plugin_query_variable(p, query, 0);
@@ -188,6 +189,29 @@ slv2_port_get_value(SLV2Plugin p,
}
+SLV2Values
+slv2_port_get_value_by_qname_i18n(SLV2Plugin p,
+ SLV2Port port,
+ const char* property)
+{
+ assert(property);
+ SLV2Values results = NULL;
+
+ char* query = slv2_strjoin(
+ "SELECT DISTINCT ?value WHERE {\n"
+ "<", slv2_value_as_uri(p->plugin_uri), "> lv2:port ?port .\n"
+ "?port lv2:symbol \"", slv2_value_as_string(port->symbol), "\";\n\t",
+ property, " ?value .\n"
+ "FILTER(lang(?value) = \"", slv2_get_lang(),
+ "\") }", NULL);
+
+ results = slv2_plugin_query_variable(p, query, 0);
+
+ free(query);
+ return results;
+}
+
+
SLV2Value
slv2_port_get_symbol(SLV2Plugin p,
SLV2Port port)
@@ -201,11 +225,16 @@ slv2_port_get_name(SLV2Plugin p,
SLV2Port port)
{
SLV2Value ret = NULL;
- SLV2Values results = slv2_port_get_value_by_qname(p, port, "lv2:name");
+ SLV2Values results = slv2_port_get_value_by_qname_i18n(p, port, "lv2:name");
- if (results && slv2_values_size(results) == 1)
+ if (results && slv2_values_size(results) > 0) {
ret = slv2_value_duplicate(slv2_values_get_at(results, 0));
-
+ } else {
+ results = slv2_port_get_value_by_qname(p, port, "lv2:name");
+ if (results && slv2_values_size(results) > 0)
+ ret = slv2_value_duplicate(slv2_values_get_at(results, 0));
+ }
+
slv2_values_free(results);
return ret;