From 9d787c6337d7080cb32af800a96cf64d43373514 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Thu, 2 Jan 2014 10:27:31 +0100
Subject: Sluift: Document some more elements

Change-Id: I2a755500f0fe88bbea5594ce858bc92dccc34805

diff --git a/Sluift/ElementConvertors/PubSubAffiliationConvertor.cpp b/Sluift/ElementConvertors/PubSubAffiliationConvertor.cpp
index 73d7d6a..c7bd331 100644
--- a/Sluift/ElementConvertors/PubSubAffiliationConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubAffiliationConvertor.cpp
@@ -82,3 +82,12 @@ void PubSubAffiliationConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<
 	}
 	lua_setfield(L, -2, "type");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubAffiliationConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubAffiliation",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `type`: `\"none\"`, `\"member\"`, `\"outcast\"`, `\"owner\"`, `\"publisher\"`, or `\"publish_only\"`\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubAffiliationConvertor.h b/Sluift/ElementConvertors/PubSubAffiliationConvertor.h
index 632a8d7..ced970a 100644
--- a/Sluift/ElementConvertors/PubSubAffiliationConvertor.h
+++ b/Sluift/ElementConvertors/PubSubAffiliationConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubAffiliation> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubAffiliation>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubAffiliationsConvertor.cpp b/Sluift/ElementConvertors/PubSubAffiliationsConvertor.cpp
index 9f34235..95a0f4c 100644
--- a/Sluift/ElementConvertors/PubSubAffiliationsConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubAffiliationsConvertor.cpp
@@ -68,3 +68,12 @@ void PubSubAffiliationsConvertor::doConvertToLua(lua_State* L, boost::shared_ptr
 		}
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubAffiliationsConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubAffiliations",
+		"This table has the following fields:\n\n"
+		"- `node`: string (Optional)\n"
+		"- `affiliations`: array<@{PubSubAffiliation}>\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubAffiliationsConvertor.h b/Sluift/ElementConvertors/PubSubAffiliationsConvertor.h
index fb0279a..74504a0 100644
--- a/Sluift/ElementConvertors/PubSubAffiliationsConvertor.h
+++ b/Sluift/ElementConvertors/PubSubAffiliationsConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubAffiliations> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubAffiliations>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubConfigureConvertor.cpp b/Sluift/ElementConvertors/PubSubConfigureConvertor.cpp
index 893bc27..a6d193b 100644
--- a/Sluift/ElementConvertors/PubSubConfigureConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubConfigureConvertor.cpp
@@ -42,3 +42,11 @@ void PubSubConfigureConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<Pu
 		lua_setfield(L, -2, "data");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubConfigureConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubConfigure",
+		"This table has the following fields:\n\n"
+		"- `data`: @{Form}\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubConfigureConvertor.h b/Sluift/ElementConvertors/PubSubConfigureConvertor.h
index 0dd9094..e946ee2 100644
--- a/Sluift/ElementConvertors/PubSubConfigureConvertor.h
+++ b/Sluift/ElementConvertors/PubSubConfigureConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubConfigure> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubConfigure>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubCreateConvertor.cpp b/Sluift/ElementConvertors/PubSubCreateConvertor.cpp
index 64e2ee3..0a75bec 100644
--- a/Sluift/ElementConvertors/PubSubCreateConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubCreateConvertor.cpp
@@ -49,3 +49,12 @@ void PubSubCreateConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<PubSu
 		lua_setfield(L, -2, "configure");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubCreateConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubCreate",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `configure`: @{PubSubConfigure}\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubCreateConvertor.h b/Sluift/ElementConvertors/PubSubCreateConvertor.h
index 2cb1ea6..8cd693b 100644
--- a/Sluift/ElementConvertors/PubSubCreateConvertor.h
+++ b/Sluift/ElementConvertors/PubSubCreateConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubCreate> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubCreate>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubDefaultConvertor.cpp b/Sluift/ElementConvertors/PubSubDefaultConvertor.cpp
index d9b68ac..de8e857 100644
--- a/Sluift/ElementConvertors/PubSubDefaultConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubDefaultConvertor.cpp
@@ -66,3 +66,12 @@ void PubSubDefaultConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<PubS
 	}
 	lua_setfield(L, -2, "type");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubDefaultConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubDefault",
+		"This table has the following fields:\n\n"
+		"- `node`: string (Optional)\n"
+		"- `type`: `\"none\"`, `\"collection\"`, or `\"leaf\"`\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubDefaultConvertor.h b/Sluift/ElementConvertors/PubSubDefaultConvertor.h
index 89dd9be..7f53677 100644
--- a/Sluift/ElementConvertors/PubSubDefaultConvertor.h
+++ b/Sluift/ElementConvertors/PubSubDefaultConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubDefault> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubDefault>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventAssociateConvertor.cpp b/Sluift/ElementConvertors/PubSubEventAssociateConvertor.cpp
index 2b004c8..9f3ac93 100644
--- a/Sluift/ElementConvertors/PubSubEventAssociateConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventAssociateConvertor.cpp
@@ -39,3 +39,11 @@ void PubSubEventAssociateConvertor::doConvertToLua(lua_State* L, boost::shared_p
 	lua_pushstring(L, payload->getNode().c_str());
 	lua_setfield(L, -2, "node");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventAssociateConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventAssociate",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventAssociateConvertor.h b/Sluift/ElementConvertors/PubSubEventAssociateConvertor.h
index 60c9d28..157db20 100644
--- a/Sluift/ElementConvertors/PubSubEventAssociateConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventAssociateConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventAssociate> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventAssociate>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventCollectionConvertor.cpp b/Sluift/ElementConvertors/PubSubEventCollectionConvertor.cpp
index d05b479..fbaa05c 100644
--- a/Sluift/ElementConvertors/PubSubEventCollectionConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventCollectionConvertor.cpp
@@ -61,3 +61,13 @@ void PubSubEventCollectionConvertor::doConvertToLua(lua_State* L, boost::shared_
 		lua_setfield(L, -2, "associate");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventCollectionConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventCollection",
+		"This table has the following fields:\n\n"
+		"- `node`: string (Optional)\n"
+		"- `disassociate`: @{PubSubEventDisassociate}\n"
+		"- `associate`: @{PubSubEventAssociate}\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventCollectionConvertor.h b/Sluift/ElementConvertors/PubSubEventCollectionConvertor.h
index eed2541..62c97b3 100644
--- a/Sluift/ElementConvertors/PubSubEventCollectionConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventCollectionConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventCollection> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventCollection>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventConfigurationConvertor.cpp b/Sluift/ElementConvertors/PubSubEventConfigurationConvertor.cpp
index ecdf145..d9ae69d 100644
--- a/Sluift/ElementConvertors/PubSubEventConfigurationConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventConfigurationConvertor.cpp
@@ -49,3 +49,12 @@ void PubSubEventConfigurationConvertor::doConvertToLua(lua_State* L, boost::shar
 		lua_setfield(L, -2, "data");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventConfigurationConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventConfiguration",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `data`: @{Form}\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventConfigurationConvertor.h b/Sluift/ElementConvertors/PubSubEventConfigurationConvertor.h
index 4347ebc..67b3f5e 100644
--- a/Sluift/ElementConvertors/PubSubEventConfigurationConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventConfigurationConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventConfiguration> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventConfiguration>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventDeleteConvertor.cpp b/Sluift/ElementConvertors/PubSubEventDeleteConvertor.cpp
index b03f22a..7b12dc2 100644
--- a/Sluift/ElementConvertors/PubSubEventDeleteConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventDeleteConvertor.cpp
@@ -49,3 +49,12 @@ void PubSubEventDeleteConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<
 		lua_setfield(L, -2, "redirects");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventDeleteConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventDelete",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `redirects`: @{PubSubEventRedirect}\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventDeleteConvertor.h b/Sluift/ElementConvertors/PubSubEventDeleteConvertor.h
index a0cfd3d..18b34a5 100644
--- a/Sluift/ElementConvertors/PubSubEventDeleteConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventDeleteConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventDelete> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventDelete>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventDisassociateConvertor.cpp b/Sluift/ElementConvertors/PubSubEventDisassociateConvertor.cpp
index ccd8c6e..aa90da7 100644
--- a/Sluift/ElementConvertors/PubSubEventDisassociateConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventDisassociateConvertor.cpp
@@ -39,3 +39,11 @@ void PubSubEventDisassociateConvertor::doConvertToLua(lua_State* L, boost::share
 	lua_pushstring(L, payload->getNode().c_str());
 	lua_setfield(L, -2, "node");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventDisassociateConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventDisassociate",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventDisassociateConvertor.h b/Sluift/ElementConvertors/PubSubEventDisassociateConvertor.h
index 90c8232..673389a 100644
--- a/Sluift/ElementConvertors/PubSubEventDisassociateConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventDisassociateConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventDisassociate> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventDisassociate>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventItemConvertor.cpp b/Sluift/ElementConvertors/PubSubEventItemConvertor.cpp
index fab4bff..1e66b40 100644
--- a/Sluift/ElementConvertors/PubSubEventItemConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventItemConvertor.cpp
@@ -90,3 +90,14 @@ void PubSubEventItemConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<Pu
 		lua_setfield(L, -2, "id");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventItemConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventItem",
+		"This table has the following fields:\n\n"
+		"- `node`: string (Optional)\n"
+		"- `publisher`: string (Optional)\n"
+		"- `data`: array<element (table)>\n"
+		"- `id`: string (Optional)\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventItemConvertor.h b/Sluift/ElementConvertors/PubSubEventItemConvertor.h
index 340602a..7f85b0c 100644
--- a/Sluift/ElementConvertors/PubSubEventItemConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventItemConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventItem> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventItem>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventItemsConvertor.cpp b/Sluift/ElementConvertors/PubSubEventItemsConvertor.cpp
index 9996cc6..4e7c2c7 100644
--- a/Sluift/ElementConvertors/PubSubEventItemsConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventItemsConvertor.cpp
@@ -100,3 +100,13 @@ void PubSubEventItemsConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<P
 		lua_setfield(L, -2, "retracts");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventItemsConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventItems",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `items`: array<@{PubSubEventItem}>\n"
+		"- `retracts`: array<@{PubSubEventRetract}>\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventItemsConvertor.h b/Sluift/ElementConvertors/PubSubEventItemsConvertor.h
index 9adbf15..4de7b89 100644
--- a/Sluift/ElementConvertors/PubSubEventItemsConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventItemsConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventItems> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventItems>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventPurgeConvertor.cpp b/Sluift/ElementConvertors/PubSubEventPurgeConvertor.cpp
index e389fcf..0d2e9bf 100644
--- a/Sluift/ElementConvertors/PubSubEventPurgeConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventPurgeConvertor.cpp
@@ -39,3 +39,11 @@ void PubSubEventPurgeConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<P
 	lua_pushstring(L, payload->getNode().c_str());
 	lua_setfield(L, -2, "node");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventPurgeConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventPurge",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventPurgeConvertor.h b/Sluift/ElementConvertors/PubSubEventPurgeConvertor.h
index d94aa36..f4a3db5 100644
--- a/Sluift/ElementConvertors/PubSubEventPurgeConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventPurgeConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventPurge> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventPurge>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventRedirectConvertor.cpp b/Sluift/ElementConvertors/PubSubEventRedirectConvertor.cpp
index 6e128da..09456f1 100644
--- a/Sluift/ElementConvertors/PubSubEventRedirectConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventRedirectConvertor.cpp
@@ -39,3 +39,11 @@ void PubSubEventRedirectConvertor::doConvertToLua(lua_State* L, boost::shared_pt
 	lua_pushstring(L, payload->getURI().c_str());
 	lua_setfield(L, -2, "uri");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventRedirectConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventRedirect",
+		"This table has the following fields:\n\n"
+		"- `uri`: string\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventRedirectConvertor.h b/Sluift/ElementConvertors/PubSubEventRedirectConvertor.h
index 4904102..f32a684 100644
--- a/Sluift/ElementConvertors/PubSubEventRedirectConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventRedirectConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventRedirect> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventRedirect>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventRetractConvertor.cpp b/Sluift/ElementConvertors/PubSubEventRetractConvertor.cpp
index aed29a0..c205c48 100644
--- a/Sluift/ElementConvertors/PubSubEventRetractConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventRetractConvertor.cpp
@@ -39,3 +39,11 @@ void PubSubEventRetractConvertor::doConvertToLua(lua_State* L, boost::shared_ptr
 	lua_pushstring(L, payload->getID().c_str());
 	lua_setfield(L, -2, "id");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventRetractConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventRetract",
+		"This table has the following fields:\n\n"
+		"- `id`: string\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventRetractConvertor.h b/Sluift/ElementConvertors/PubSubEventRetractConvertor.h
index 7a7c0f9..a87f239 100644
--- a/Sluift/ElementConvertors/PubSubEventRetractConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventRetractConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventRetract> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventRetract>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubEventSubscriptionConvertor.cpp b/Sluift/ElementConvertors/PubSubEventSubscriptionConvertor.cpp
index a4c160f..463ebea 100644
--- a/Sluift/ElementConvertors/PubSubEventSubscriptionConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubEventSubscriptionConvertor.cpp
@@ -93,3 +93,15 @@ void PubSubEventSubscriptionConvertor::doConvertToLua(lua_State* L, boost::share
 	lua_pushstring(L, dateTimeToString(payload->getExpiry()).c_str());
 	lua_setfield(L, -2, "expiry");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubEventSubscriptionConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubEventSubscription",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `jid`: jid (string)\n"
+		"- `subscription`: `\"none\"`, `\"pending\"`, `\"subscribed\"`, or `\"unconfigured\"`\n"
+		"- `subscriptionid`: string (Optional)\n"
+		"- `expiry`: datetime (string)\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubEventSubscriptionConvertor.h b/Sluift/ElementConvertors/PubSubEventSubscriptionConvertor.h
index fa04fb7..5d40842 100644
--- a/Sluift/ElementConvertors/PubSubEventSubscriptionConvertor.h
+++ b/Sluift/ElementConvertors/PubSubEventSubscriptionConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubEventSubscription> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubEventSubscription>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubItemConvertor.cpp b/Sluift/ElementConvertors/PubSubItemConvertor.cpp
index e06065b..19bb936 100644
--- a/Sluift/ElementConvertors/PubSubItemConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubItemConvertor.cpp
@@ -70,3 +70,12 @@ void PubSubItemConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<PubSubI
 	lua_pushstring(L, payload->getID().c_str());
 	lua_setfield(L, -2, "id");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubItemConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubItem",
+		"This table has the following fields:\n\n"
+		"- `data`: array<element (table)>\n"
+		"- `id`: string\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubItemConvertor.h b/Sluift/ElementConvertors/PubSubItemConvertor.h
index 176e1c4..fecf875 100644
--- a/Sluift/ElementConvertors/PubSubItemConvertor.h
+++ b/Sluift/ElementConvertors/PubSubItemConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubItem> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubItem>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubItemsConvertor.cpp b/Sluift/ElementConvertors/PubSubItemsConvertor.cpp
index 5ecb72e..24ad6c8 100644
--- a/Sluift/ElementConvertors/PubSubItemsConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubItemsConvertor.cpp
@@ -84,3 +84,14 @@ void PubSubItemsConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<PubSub
 		lua_setfield(L, -2, "subscriptionid");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubItemsConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubItems",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `items`: array<@{PubSubItem}>\n"
+		"- `maximum_items`: number (Optional)\n"
+		"- `subscriptionid`: string (Optional)\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubItemsConvertor.h b/Sluift/ElementConvertors/PubSubItemsConvertor.h
index 9978806..4da428c 100644
--- a/Sluift/ElementConvertors/PubSubItemsConvertor.h
+++ b/Sluift/ElementConvertors/PubSubItemsConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubItems> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubItems>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOptionsConvertor.cpp b/Sluift/ElementConvertors/PubSubOptionsConvertor.cpp
index cc27973..874bb05 100644
--- a/Sluift/ElementConvertors/PubSubOptionsConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOptionsConvertor.cpp
@@ -65,3 +65,14 @@ void PubSubOptionsConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<PubS
 		lua_setfield(L, -2, "subscriptionid");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOptionsConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOptions",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `jid`: jid (string)\n"
+		"- `data`: @{Form}\n"
+		"- `subscriptionid`: string (Optional)\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOptionsConvertor.h b/Sluift/ElementConvertors/PubSubOptionsConvertor.h
index 95a1dc8..b8f0c2d 100644
--- a/Sluift/ElementConvertors/PubSubOptionsConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOptionsConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOptions> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOptions>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOwnerAffiliationConvertor.cpp b/Sluift/ElementConvertors/PubSubOwnerAffiliationConvertor.cpp
index f1a7b50..f5f8e68 100644
--- a/Sluift/ElementConvertors/PubSubOwnerAffiliationConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOwnerAffiliationConvertor.cpp
@@ -82,3 +82,12 @@ void PubSubOwnerAffiliationConvertor::doConvertToLua(lua_State* L, boost::shared
 	}
 	lua_setfield(L, -2, "type");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOwnerAffiliationConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOwnerAffiliation",
+		"This table has the following fields:\n\n"
+		"- `jid`: jid (string)\n"
+		"- `type`: `\"none\"`, `\"member\"`, `\"outcast\"`, `\"owner\"`, `\"publisher\"`, or `\"publish_only\"`\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOwnerAffiliationConvertor.h b/Sluift/ElementConvertors/PubSubOwnerAffiliationConvertor.h
index 72bfaa1..a5642bc 100644
--- a/Sluift/ElementConvertors/PubSubOwnerAffiliationConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOwnerAffiliationConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOwnerAffiliation> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOwnerAffiliation>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOwnerAffiliationsConvertor.cpp b/Sluift/ElementConvertors/PubSubOwnerAffiliationsConvertor.cpp
index bee8539..6d2a014 100644
--- a/Sluift/ElementConvertors/PubSubOwnerAffiliationsConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOwnerAffiliationsConvertor.cpp
@@ -66,3 +66,12 @@ void PubSubOwnerAffiliationsConvertor::doConvertToLua(lua_State* L, boost::share
 		}
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOwnerAffiliationsConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOwnerAffiliations",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `affiliations`: array<@{PubSubOwnerAffiliation}>\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOwnerAffiliationsConvertor.h b/Sluift/ElementConvertors/PubSubOwnerAffiliationsConvertor.h
index 377e108..a5b9dc6 100644
--- a/Sluift/ElementConvertors/PubSubOwnerAffiliationsConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOwnerAffiliationsConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOwnerAffiliations> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOwnerAffiliations>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOwnerConfigureConvertor.cpp b/Sluift/ElementConvertors/PubSubOwnerConfigureConvertor.cpp
index 87505e1..5330f19 100644
--- a/Sluift/ElementConvertors/PubSubOwnerConfigureConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOwnerConfigureConvertor.cpp
@@ -51,3 +51,12 @@ void PubSubOwnerConfigureConvertor::doConvertToLua(lua_State* L, boost::shared_p
 		lua_setfield(L, -2, "data");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOwnerConfigureConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOwnerConfigure",
+		"This table has the following fields:\n\n"
+		"- `node`: string (Optional)\n"
+		"- `data`: @{Form}\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOwnerConfigureConvertor.h b/Sluift/ElementConvertors/PubSubOwnerConfigureConvertor.h
index 83b1153..f70c022 100644
--- a/Sluift/ElementConvertors/PubSubOwnerConfigureConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOwnerConfigureConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOwnerConfigure> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOwnerConfigure>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOwnerDefaultConvertor.cpp b/Sluift/ElementConvertors/PubSubOwnerDefaultConvertor.cpp
index 17612cc..511229a 100644
--- a/Sluift/ElementConvertors/PubSubOwnerDefaultConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOwnerDefaultConvertor.cpp
@@ -42,3 +42,11 @@ void PubSubOwnerDefaultConvertor::doConvertToLua(lua_State* L, boost::shared_ptr
 		lua_setfield(L, -2, "data");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOwnerDefaultConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOwnerDefault",
+		"This table has the following fields:\n\n"
+		"- `data`: @{Form}\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOwnerDefaultConvertor.h b/Sluift/ElementConvertors/PubSubOwnerDefaultConvertor.h
index 3a0f8ee..6d58c28 100644
--- a/Sluift/ElementConvertors/PubSubOwnerDefaultConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOwnerDefaultConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOwnerDefault> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOwnerDefault>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOwnerDeleteConvertor.cpp b/Sluift/ElementConvertors/PubSubOwnerDeleteConvertor.cpp
index f67ed1e..3fdf0e9 100644
--- a/Sluift/ElementConvertors/PubSubOwnerDeleteConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOwnerDeleteConvertor.cpp
@@ -49,3 +49,12 @@ void PubSubOwnerDeleteConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<
 		lua_setfield(L, -2, "redirect");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOwnerDeleteConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOwnerDelete",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `redirect`: @{PubSubOwnerRedirect}\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOwnerDeleteConvertor.h b/Sluift/ElementConvertors/PubSubOwnerDeleteConvertor.h
index 7475e9c..c6c756e 100644
--- a/Sluift/ElementConvertors/PubSubOwnerDeleteConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOwnerDeleteConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOwnerDelete> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOwnerDelete>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOwnerPurgeConvertor.cpp b/Sluift/ElementConvertors/PubSubOwnerPurgeConvertor.cpp
index a060db9..2fa70f1 100644
--- a/Sluift/ElementConvertors/PubSubOwnerPurgeConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOwnerPurgeConvertor.cpp
@@ -39,3 +39,11 @@ void PubSubOwnerPurgeConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<P
 	lua_pushstring(L, payload->getNode().c_str());
 	lua_setfield(L, -2, "node");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOwnerPurgeConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOwnerPurge",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOwnerPurgeConvertor.h b/Sluift/ElementConvertors/PubSubOwnerPurgeConvertor.h
index 34c979b..7c19190 100644
--- a/Sluift/ElementConvertors/PubSubOwnerPurgeConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOwnerPurgeConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOwnerPurge> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOwnerPurge>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOwnerRedirectConvertor.cpp b/Sluift/ElementConvertors/PubSubOwnerRedirectConvertor.cpp
index d11df72..b4c567d 100644
--- a/Sluift/ElementConvertors/PubSubOwnerRedirectConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOwnerRedirectConvertor.cpp
@@ -39,3 +39,11 @@ void PubSubOwnerRedirectConvertor::doConvertToLua(lua_State* L, boost::shared_pt
 	lua_pushstring(L, payload->getURI().c_str());
 	lua_setfield(L, -2, "uri");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOwnerRedirectConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOwnerRedirect",
+		"This table has the following fields:\n\n"
+		"- `uri`: string\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOwnerRedirectConvertor.h b/Sluift/ElementConvertors/PubSubOwnerRedirectConvertor.h
index fc1ddce..8ed25a7 100644
--- a/Sluift/ElementConvertors/PubSubOwnerRedirectConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOwnerRedirectConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOwnerRedirect> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOwnerRedirect>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOwnerSubscriptionConvertor.cpp b/Sluift/ElementConvertors/PubSubOwnerSubscriptionConvertor.cpp
index dbba238..49eb245 100644
--- a/Sluift/ElementConvertors/PubSubOwnerSubscriptionConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOwnerSubscriptionConvertor.cpp
@@ -70,3 +70,12 @@ void PubSubOwnerSubscriptionConvertor::doConvertToLua(lua_State* L, boost::share
 	}
 	lua_setfield(L, -2, "subscription");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOwnerSubscriptionConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOwnerSubscription",
+		"This table has the following fields:\n\n"
+		"- `jid`: jid (string)\n"
+		"- `subscription`: `\"none\"`, `\"pending\"`, `\"subscribed\"`, or `\"unconfigured\"`\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOwnerSubscriptionConvertor.h b/Sluift/ElementConvertors/PubSubOwnerSubscriptionConvertor.h
index ca80c82..ed71674 100644
--- a/Sluift/ElementConvertors/PubSubOwnerSubscriptionConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOwnerSubscriptionConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOwnerSubscription> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOwnerSubscription>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubOwnerSubscriptionsConvertor.cpp b/Sluift/ElementConvertors/PubSubOwnerSubscriptionsConvertor.cpp
index 045cf12..1772c92 100644
--- a/Sluift/ElementConvertors/PubSubOwnerSubscriptionsConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubOwnerSubscriptionsConvertor.cpp
@@ -66,3 +66,12 @@ void PubSubOwnerSubscriptionsConvertor::doConvertToLua(lua_State* L, boost::shar
 		}
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubOwnerSubscriptionsConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubOwnerSubscriptions",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `subscriptions`: array<@{PubSubOwnerSubscription}>\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubOwnerSubscriptionsConvertor.h b/Sluift/ElementConvertors/PubSubOwnerSubscriptionsConvertor.h
index 2e12c93..f69d265 100644
--- a/Sluift/ElementConvertors/PubSubOwnerSubscriptionsConvertor.h
+++ b/Sluift/ElementConvertors/PubSubOwnerSubscriptionsConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubOwnerSubscriptions> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubOwnerSubscriptions>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubPublishConvertor.cpp b/Sluift/ElementConvertors/PubSubPublishConvertor.cpp
index 880d9fc..7407754 100644
--- a/Sluift/ElementConvertors/PubSubPublishConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubPublishConvertor.cpp
@@ -70,3 +70,12 @@ void PubSubPublishConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<PubS
 		lua_setfield(L, -2, "items");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubPublishConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubPublish",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `items`: array<@{PubSubItem}>\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubPublishConvertor.h b/Sluift/ElementConvertors/PubSubPublishConvertor.h
index 4415566..2590c72 100644
--- a/Sluift/ElementConvertors/PubSubPublishConvertor.h
+++ b/Sluift/ElementConvertors/PubSubPublishConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubPublish> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubPublish>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubRetractConvertor.cpp b/Sluift/ElementConvertors/PubSubRetractConvertor.cpp
index 61ca3df..4abc120 100644
--- a/Sluift/ElementConvertors/PubSubRetractConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubRetractConvertor.cpp
@@ -77,3 +77,13 @@ void PubSubRetractConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<PubS
 	lua_pushboolean(L, payload->isNotify());
 	lua_setfield(L, -2, "notify");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubRetractConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubRetract",
+		"This table has the following fields:\n\n"
+		"- `node`: string\n"
+		"- `items`: array<@{PubSubItem}>\n"
+		"- `notify`: boolean\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubRetractConvertor.h b/Sluift/ElementConvertors/PubSubRetractConvertor.h
index 80d888b..1bd5b32 100644
--- a/Sluift/ElementConvertors/PubSubRetractConvertor.h
+++ b/Sluift/ElementConvertors/PubSubRetractConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubRetract> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubRetract>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubSubscribeConvertor.cpp b/Sluift/ElementConvertors/PubSubSubscribeConvertor.cpp
index 06d6447..977bd35 100644
--- a/Sluift/ElementConvertors/PubSubSubscribeConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubSubscribeConvertor.cpp
@@ -58,3 +58,13 @@ void PubSubSubscribeConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<Pu
 		lua_setfield(L, -2, "options");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubSubscribeConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubSubscribe",
+		"This table has the following fields:\n\n"
+		"- `node`: string (Optional)\n"
+		"- `jid`: jid (string)\n"
+		"- `options`: @{PubSubOptions}\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubSubscribeConvertor.h b/Sluift/ElementConvertors/PubSubSubscribeConvertor.h
index 2073c09..402b973 100644
--- a/Sluift/ElementConvertors/PubSubSubscribeConvertor.h
+++ b/Sluift/ElementConvertors/PubSubSubscribeConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubSubscribe> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubSubscribe>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubSubscribeOptionsConvertor.cpp b/Sluift/ElementConvertors/PubSubSubscribeOptionsConvertor.cpp
index e8053fb..6e1203a 100644
--- a/Sluift/ElementConvertors/PubSubSubscribeOptionsConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubSubscribeOptionsConvertor.cpp
@@ -39,3 +39,11 @@ void PubSubSubscribeOptionsConvertor::doConvertToLua(lua_State* L, boost::shared
 	lua_pushboolean(L, payload->isRequired());
 	lua_setfield(L, -2, "required");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubSubscribeOptionsConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubSubscribeOptions",
+		"This table has the following fields:\n\n"
+		"- `required`: boolean\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubSubscribeOptionsConvertor.h b/Sluift/ElementConvertors/PubSubSubscribeOptionsConvertor.h
index 71e1baf..1f2399d 100644
--- a/Sluift/ElementConvertors/PubSubSubscribeOptionsConvertor.h
+++ b/Sluift/ElementConvertors/PubSubSubscribeOptionsConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubSubscribeOptions> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubSubscribeOptions>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubSubscriptionConvertor.cpp b/Sluift/ElementConvertors/PubSubSubscriptionConvertor.cpp
index 69cd85a..9be9572 100644
--- a/Sluift/ElementConvertors/PubSubSubscriptionConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubSubscriptionConvertor.cpp
@@ -98,3 +98,15 @@ void PubSubSubscriptionConvertor::doConvertToLua(lua_State* L, boost::shared_ptr
 	}
 	lua_setfield(L, -2, "subscription");
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubSubscriptionConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubSubscription",
+		"This table has the following fields:\n\n"
+		"- `node`: string (Optional)\n"
+		"- `subscriptionid`: string (Optional)\n"
+		"- `jid`: jid (string)\n"
+		"- `options`: @{PubSubSubscribeOptions}\n"
+		"- `subscription`: `\"none\"`, `\"pending\"`, `\"subscribed\"`, or `\"unconfigured\"`\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubSubscriptionConvertor.h b/Sluift/ElementConvertors/PubSubSubscriptionConvertor.h
index 2da4930..485b668 100644
--- a/Sluift/ElementConvertors/PubSubSubscriptionConvertor.h
+++ b/Sluift/ElementConvertors/PubSubSubscriptionConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubSubscription> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubSubscription>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubSubscriptionsConvertor.cpp b/Sluift/ElementConvertors/PubSubSubscriptionsConvertor.cpp
index 04f8da8..c336ae7 100644
--- a/Sluift/ElementConvertors/PubSubSubscriptionsConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubSubscriptionsConvertor.cpp
@@ -68,3 +68,12 @@ void PubSubSubscriptionsConvertor::doConvertToLua(lua_State* L, boost::shared_pt
 		}
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubSubscriptionsConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubSubscriptions",
+		"This table has the following fields:\n\n"
+		"- `node`: string (Optional)\n"
+		"- `subscriptions`: array<@{PubSubSubscription}>\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubSubscriptionsConvertor.h b/Sluift/ElementConvertors/PubSubSubscriptionsConvertor.h
index 7f18f64..e891df7 100644
--- a/Sluift/ElementConvertors/PubSubSubscriptionsConvertor.h
+++ b/Sluift/ElementConvertors/PubSubSubscriptionsConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubSubscriptions> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubSubscriptions>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/PubSubUnsubscribeConvertor.cpp b/Sluift/ElementConvertors/PubSubUnsubscribeConvertor.cpp
index 323cb29..362dd58 100644
--- a/Sluift/ElementConvertors/PubSubUnsubscribeConvertor.cpp
+++ b/Sluift/ElementConvertors/PubSubUnsubscribeConvertor.cpp
@@ -57,3 +57,13 @@ void PubSubUnsubscribeConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<
 		lua_setfield(L, -2, "subscriptionid");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> PubSubUnsubscribeConvertor::getDocumentation() const {
+	return Documentation(
+		"PubSubUnsubscribe",
+		"This table has the following fields:\n\n"
+		"- `node`: string (Optional)\n"
+		"- `jid`: jid (string)\n"
+		"- `subscriptionid`: string (Optional)\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/PubSubUnsubscribeConvertor.h b/Sluift/ElementConvertors/PubSubUnsubscribeConvertor.h
index 16d279f..065ae90 100644
--- a/Sluift/ElementConvertors/PubSubUnsubscribeConvertor.h
+++ b/Sluift/ElementConvertors/PubSubUnsubscribeConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<PubSubUnsubscribe> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<PubSubUnsubscribe>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
diff --git a/Sluift/ElementConvertors/UserLocationConvertor.cpp b/Sluift/ElementConvertors/UserLocationConvertor.cpp
index 97cb288..aa57fdf 100644
--- a/Sluift/ElementConvertors/UserLocationConvertor.cpp
+++ b/Sluift/ElementConvertors/UserLocationConvertor.cpp
@@ -230,3 +230,32 @@ void UserLocationConvertor::doConvertToLua(lua_State* L, boost::shared_ptr<UserL
 		lua_setfield(L, -2, "speed");
 	}
 }
+
+boost::optional<LuaElementConvertor::Documentation> UserLocationConvertor::getDocumentation() const {
+	return Documentation(
+		"UserLocation",
+		"This table has the following fields:\n\n"
+		"- `area`: string (Optional)\n"
+		"- `altitude`: @{float} (Optional)\n"
+		"- `locality`: string (Optional)\n"
+		"- `latitude`: @{float} (Optional)\n"
+		"- `accuracy`: @{float} (Optional)\n"
+		"- `description`: string (Optional)\n"
+		"- `country_code`: string (Optional)\n"
+		"- `timestamp`: datetime (string) (Optional)\n"
+		"- `floor`: string (Optional)\n"
+		"- `building`: string (Optional)\n"
+		"- `room`: string (Optional)\n"
+		"- `country`: string (Optional)\n"
+		"- `region`: string (Optional)\n"
+		"- `uri`: string (Optional)\n"
+		"- `longitude`: @{float} (Optional)\n"
+		"- `error`: @{float} (Optional)\n"
+		"- `postal_code`: string (Optional)\n"
+		"- `bearing`: @{float} (Optional)\n"
+		"- `text`: string (Optional)\n"
+		"- `datum`: string (Optional)\n"
+		"- `street`: string (Optional)\n"
+		"- `speed`: @{float} (Optional)\n"
+	);
+}
diff --git a/Sluift/ElementConvertors/UserLocationConvertor.h b/Sluift/ElementConvertors/UserLocationConvertor.h
index a5eb153..365caae 100644
--- a/Sluift/ElementConvertors/UserLocationConvertor.h
+++ b/Sluift/ElementConvertors/UserLocationConvertor.h
@@ -21,6 +21,7 @@ namespace Swift {
 
 			virtual boost::shared_ptr<UserLocation> doConvertFromLua(lua_State*) SWIFTEN_OVERRIDE;
 			virtual void doConvertToLua(lua_State*, boost::shared_ptr<UserLocation>) SWIFTEN_OVERRIDE;
+			virtual boost::optional<Documentation> getDocumentation() const SWIFTEN_OVERRIDE;
 
 		private:
 			LuaElementConvertors* convertors;
-- 
cgit v0.10.2-6-g49f6