end
end
-function stringArrayAppend(strings, string)
- if string ~= "" then
- table.insert(strings, string)
- end
-end
-
-function generateStringArray(objects, createFunc)
- local ret = {}
- for k, target in ipairs(objects) do
- stringArrayAppend(ret, createFunc(target))
- end
- return ret
-end
-
function describeObject(obj)
- local labels = generateStringArray(obj:inRelation(RELATION_LABELLED_BY), function(x) return x:name() end)
- local descriptions = generateStringArray(obj:inRelation(RELATION_DESCRIBED_BY), function(x) return x:description() end)
- local traits = generateStringArray(obj:inRelation(RELATION_DESCRIBED_BY), trait)
-
- -- use original object name if related objects do not provide other
- if table.getn(labels) == 0 then
- stringArrayAppend(labels, obj:name())
- end
-
- -- use original object description if related objects do not provide other
- if table.getn(descriptions) == 0 then
- stringArrayAppend(descriptions, obj:description())
+ local related_trait = {}
+ for k, target in ipairs(obj:inRelation(RELATION_DESCRIBED_BY)) do
+ table.insert(related_trait, trait(target))
end
-
- -- use original object trait if related objects do not provide other
- if table.getn(traits) == 0 then
- stringArrayAppend(traits, trait(obj))
+ local ret = {obj:name(), trait(obj), obj:description(), table.concat(related_trait, ", ")}
+ for i=#ret,1,-1 do
+ if ret[i] == nil or ret[i] == "" then
+ table.remove(ret, i)
+ end
end
-
- local ret = {}
- stringArrayAppend(ret, table.concat(labels, ", "))
- stringArrayAppend(ret, table.concat(traits, ", "))
- stringArrayAppend(ret, table.concat(descriptions, ", "))
-
return table.concat(ret, ", ")
end
AtspiAccessible *obj = _pop_class_obj(L, 1, 1, ACCESSIBLE_CLASS_NAME);
AtspiRelationType type = lua_tonumber(L, -1);
GError *err = NULL;
- int i, j, idx;
+ int i, j;
lua_newtable(L);
if (!obj) return 1;
GERROR_CHECK(err);
if (!rels) return 1;
- for (i = 0, idx = 1; i < rels->len; i++)
+ for (i = 0; i < rels->len; i++)
{
AtspiRelation *rel = g_array_index(rels, AtspiRelation*, i);
if (atspi_relation_get_relation_type(rel) == type)
{
AtspiAccessible *target = atspi_relation_get_target(rel, j);
if (!target) continue;
- lua_pushinteger(L, idx++);
+ lua_pushinteger(L, j);
_push_class_obj(L, target, ACCESSIBLE_CLASS_NAME);
lua_settable(L, -3);
}