1
0

APIDump: Added ZeroBraneStudio API export.

Fixes #821.
This commit is contained in:
madmaxoft 2014-03-19 22:42:56 +01:00
parent 7c717fe6df
commit 96e0b26912

View File

@ -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