summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--MCServer/Plugins/APIDump/main_APIDump.lua133
1 files changed, 128 insertions, 5 deletions
diff --git a/MCServer/Plugins/APIDump/main_APIDump.lua b/MCServer/Plugins/APIDump/main_APIDump.lua
index 6d4a6ebc5..2e1aa445d 100644
--- a/MCServer/Plugins/APIDump/main_APIDump.lua
+++ b/MCServer/Plugins/APIDump/main_APIDump.lua
@@ -1231,10 +1231,6 @@ local function DumpAPIHtml(a_API)
return (Hook1.Name < Hook2.Name);
end
);
-
- -- Read in the descriptions:
- LOG("Reading descriptions...");
- ReadDescriptions(a_API);
ReadHooks(Hooks);
-- Create a "class index" file, write each class as a link to that file,
@@ -1329,6 +1325,126 @@ end
+--- Returns the string with extra tabs and CR/LFs removed
+local function CleanUpDescription(a_Desc)
+ -- Get rid of indent and newlines, normalize whitespace:
+ local res = a_Desc:gsub("[\n\t]", "")
+ res = a_Desc:gsub("%s%s+", " ")
+
+ -- Replace paragraph marks with newlines:
+ res = res:gsub("<p>", "\n")
+ res = res:gsub("</p>", "")
+
+ -- Replace list items with dashes:
+ res = res:gsub("</?ul>", "")
+ res = res:gsub("<li>", "\n - ")
+ res = res:gsub("</li>", "")
+
+ return res
+end
+
+
+
+
+
+--- Writes a list of methods into the specified file in ZBS format
+local function WriteZBSMethods(f, a_Methods)
+ for _, func in ipairs(a_Methods or {}) do
+ f:write("\t\t\t[\"", func.Name, "\"] =\n")
+ f:write("\t\t\t{\n")
+ f:write("\t\t\t\ttype = \"method\",\n")
+ if ((func.Notes ~= nil) and (func.Notes ~= "")) then
+ f:write("\t\t\t\tdescription = [[", CleanUpDescription(func.Notes or ""), " ]],\n")
+ end
+ f:write("\t\t\t},\n")
+ end
+end
+
+
+
+
+
+--- Writes a list of constants into the specified file in ZBS format
+local function WriteZBSConstants(f, a_Constants)
+ for _, cons in ipairs(a_Constants or {}) do
+ f:write("\t\t\t[\"", cons.Name, "\"] =\n")
+ f:write("\t\t\t{\n")
+ f:write("\t\t\t\ttype = \"value\",\n")
+ if ((cons.Desc ~= nil) and (cons.Desc ~= "")) then
+ f:write("\t\t\t\tdescription = [[", CleanUpDescription(cons.Desc or ""), " ]],\n")
+ end
+ f:write("\t\t\t},\n")
+ end
+end
+
+
+
+
+
+--- Writes one MCS class definition into the specified file in ZBS format
+local function WriteZBSClass(f, a_Class)
+ assert(type(a_Class) == "table")
+
+ -- Write class header:
+ f:write("\t", a_Class.Name, " =\n\t{\n")
+ f:write("\t\ttype = \"class\",\n")
+ f:write("\t\tdescription = [[", CleanUpDescription(a_Class.Desc or ""), " ]],\n")
+ f:write("\t\tchilds =\n")
+ f:write("\t\t{\n")
+
+ -- Export methods and constants:
+ WriteZBSMethods(f, a_Class.Functions)
+ WriteZBSConstants(f, a_Class.Constants)
+
+ -- Finish the class definition:
+ f:write("\t\t},\n")
+ f:write("\t},\n\n")
+end
+
+
+
+
+
+--- Dumps the entire API table into a file in the ZBS format
+local function DumpAPIZBS(a_API)
+ LOG("Dumping ZBS API description...")
+ local f, err = io.open("mcserver.lua", "w")
+ if (f == nil) then
+ LOG("Cannot open mcserver.lua for writing, ZBS API will not be dumped. " .. err)
+ return
+ end
+
+ -- Write the file header:
+ f:write("-- This is a MCServer API file automatically generated by the APIDump plugin\n")
+ f:write("-- Note that any manual changes will be overwritten by the next dump\n\n")
+ f:write("return {\n")
+
+ -- Export each class except Globals, store those aside:
+ local Globals
+ for _, cls in ipairs(a_API) do
+ if (cls.Name ~= "Globals") then
+ WriteZBSClass(f, cls)
+ else
+ Globals = cls
+ end
+ end
+
+ -- Export the globals:
+ if (Globals) then
+ WriteZBSMethods(f, Globals.Functions)
+ WriteZBSConstants(f, Globals.Constants)
+ end
+
+ -- Finish the file:
+ f:write("}\n")
+ f:close()
+ LOG("ZBS API dumped...")
+end
+
+
+
+
+
local function DumpApi()
LOG("Dumping the API...")
@@ -1377,9 +1493,16 @@ local function DumpApi()
Globals.Name = "Globals";
table.insert(API, Globals);
- -- Dump all available API object in HTML format into a subfolder:
+ -- Read in the descriptions:
+ LOG("Reading descriptions...");
+ ReadDescriptions(API);
+
+ -- Dump all available API objects in HTML format into a subfolder:
DumpAPIHtml(API);
+ -- Dump all available API objects in format used by ZeroBraneStudio API descriptions:
+ DumpAPIZBS(API)
+
LOG("APIDump finished");
return true
end