diff --git a/Docs/Luadoc/Lua.xml b/Docs/Luadoc/Lua.xml
index 681e827a2c..82734843a4 100644
--- a/Docs/Luadoc/Lua.xml
+++ b/Docs/Luadoc/Lua.xml
@@ -1596,6 +1596,7 @@
+
@@ -1605,6 +1606,7 @@
+
diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml
index 3fd0305536..b45c75352a 100644
--- a/Docs/Luadoc/LuaDocumentation.xml
+++ b/Docs/Luadoc/LuaDocumentation.xml
@@ -4424,6 +4424,9 @@ save yourself some time, copy this for undocumented things:
Returns the value of Element in Class from metrics.ini.
+
+ Returns the names of all elements in Class from metrics.ini.
+
Returns the number of selectable themes.
@@ -4451,6 +4454,9 @@ save yourself some time, copy this for undocumented things:
Returns the value of Element in Class for the currently loaded language.
+
+ Returns the names of all elements in Class for the currently loaded language.
+
Returns the author of the current theme or "[unknown author]".
diff --git a/src/ThemeManager.cpp b/src/ThemeManager.cpp
index b2cbf5d8ad..69ba477d56 100644
--- a/src/ThemeManager.cpp
+++ b/src/ThemeManager.cpp
@@ -1298,6 +1298,40 @@ public:
DEFINE_METHOD( DoesLanguageExist, DoesLanguageExist(SArg(1)) );
DEFINE_METHOD( GetCurThemeName, GetCurThemeName() );
+ static void PushMetricNamesInGroup(IniFile const& ini, lua_State* L)
+ {
+ RString group_name= SArg(1);
+ const XNode* metric_node= ini.GetChild(group_name);
+ if(metric_node != NULL)
+ {
+ // Placed in a table indexed by number, so the order is always the same.
+ lua_createtable(L, metric_node->m_attrs.size(), 0);
+ int next_index= 1;
+ for(XAttrs::const_iterator n= metric_node->m_attrs.begin(); n != metric_node->m_attrs.end(); ++n)
+ {
+ LuaHelpers::Push(L, n->first);
+ lua_rawseti(L, -2, next_index);
+ ++next_index;
+ }
+ }
+ else
+ {
+ lua_pushnil(L);
+ }
+ }
+
+ static int GetMetricNamesInGroup(T* p, lua_State* L)
+ {
+ PushMetricNamesInGroup(g_pLoadedThemeData->iniMetrics, L);
+ return 1;
+ }
+
+ static int GetStringNamesInGroup(T* p, lua_State* L)
+ {
+ PushMetricNamesInGroup(g_pLoadedThemeData->iniStrings, L);
+ return 1;
+ }
+
LunaThemeManager()
{
ADD_METHOD( ReloadMetrics );
@@ -1322,6 +1356,8 @@ public:
ADD_METHOD( GetCurThemeName );
ADD_METHOD( HasMetric );
ADD_METHOD( HasString );
+ ADD_METHOD( GetMetricNamesInGroup );
+ ADD_METHOD( GetStringNamesInGroup );
}
};