summaryrefslogtreecommitdiffstats
path: root/MCServer/Plugins/APIDump/main_APIDump.lua
diff options
context:
space:
mode:
authorJulian Laubstein <julianlaubstein@yahoo.de>2015-08-11 22:48:55 +0200
committerJulian Laubstein <julianlaubstein@yahoo.de>2015-08-11 22:48:55 +0200
commit0958e167e89d2b3289c01905ebb8897e6bc86c43 (patch)
tree482062f5cdc11520ff0d0496e419524be01f1299 /MCServer/Plugins/APIDump/main_APIDump.lua
parentMerge pull request #2423 from cuberite/JsonCppCheck (diff)
downloadcuberite-0958e167e89d2b3289c01905ebb8897e6bc86c43.tar
cuberite-0958e167e89d2b3289c01905ebb8897e6bc86c43.tar.gz
cuberite-0958e167e89d2b3289c01905ebb8897e6bc86c43.tar.bz2
cuberite-0958e167e89d2b3289c01905ebb8897e6bc86c43.tar.lz
cuberite-0958e167e89d2b3289c01905ebb8897e6bc86c43.tar.xz
cuberite-0958e167e89d2b3289c01905ebb8897e6bc86c43.tar.zst
cuberite-0958e167e89d2b3289c01905ebb8897e6bc86c43.zip
Diffstat (limited to '')
-rw-r--r--MCServer/Plugins/APIDump/main_APIDump.lua229
1 files changed, 112 insertions, 117 deletions
diff --git a/MCServer/Plugins/APIDump/main_APIDump.lua b/MCServer/Plugins/APIDump/main_APIDump.lua
index 543a299af..4892d477d 100644
--- a/MCServer/Plugins/APIDump/main_APIDump.lua
+++ b/MCServer/Plugins/APIDump/main_APIDump.lua
@@ -20,7 +20,7 @@ local g_TrackedPages = {}
local function LoadAPIFiles(a_Folder, a_DstTable)
assert(type(a_Folder) == "string")
assert(type(a_DstTable) == "table")
-
+
local Folder = g_PluginFolder .. a_Folder;
for _, fnam in ipairs(cFile:GetFolderContents(Folder)) do
local FileName = Folder .. fnam;
@@ -79,7 +79,7 @@ local function CreateAPITables()
},
...
},
-
+
cCuboid = {} -- Each array item also has the map item by its name
};
local Globals = {
@@ -94,7 +94,7 @@ local function CreateAPITables()
local Globals = {Functions = {}, Constants = {}, Variables = {}, Descendants = {}};
local API = {};
-
+
local function Add(a_APIContainer, a_ObjName, a_ObjValue)
if (type(a_ObjValue) == "function") then
table.insert(a_APIContainer.Functions, {Name = a_ObjName});
@@ -105,14 +105,14 @@ local function CreateAPITables()
table.insert(a_APIContainer.Constants, {Name = a_ObjName, Value = a_ObjValue});
end
end
-
+
local function ParseClass(a_ClassName, a_ClassObj)
local res = {Name = a_ClassName, Functions = {}, Constants = {}, Variables = {}, Descendants = {}};
-- Add functions and constants:
for i, v in pairs(a_ClassObj) do
Add(res, i, v);
end
-
+
-- Member variables:
local SetField = a_ClassObj[".set"] or {};
if ((a_ClassObj[".get"] ~= nil) and (type(a_ClassObj[".get"]) == "table")) then
@@ -128,7 +128,7 @@ local function CreateAPITables()
end
return res;
end
-
+
for i, v in pairs(_G) do
if (
(v ~= _G) and -- don't want the global namespace
@@ -145,7 +145,7 @@ local function CreateAPITables()
end
end
end
-
+
return API, Globals;
end
@@ -196,14 +196,14 @@ end
local function LinkifyString(a_String, a_Referrer)
assert(a_Referrer ~= nil);
assert(a_Referrer ~= "");
-
+
--- Adds a page to the list of tracked pages (to be checked for existence at the end)
local function AddTrackedPage(a_PageName)
local Pg = (g_TrackedPages[a_PageName] or {});
table.insert(Pg, a_Referrer);
g_TrackedPages[a_PageName] = Pg;
end
-
+
--- Creates the HTML for the specified link and title
local function CreateLink(Link, Title)
if (Link:sub(1, 7) == "http://") then
@@ -226,7 +226,7 @@ local function LinkifyString(a_String, a_Referrer)
AddTrackedPage(Link);
return "<a href=\"" .. Link .. ".html\">" .. Title .. "</a>";
end
-
+
-- Linkify the strings using the CreateLink() function:
local txt = a_String:gsub("{{([^|}]*)|([^}]*)}}", CreateLink) -- {{link|title}}
txt = txt:gsub("{{([^|}]*)}}", -- {{LinkAndTitle}}
@@ -254,10 +254,10 @@ local function WriteHtmlHook(a_Hook, a_HookNav)
return;
end
local HookName = a_Hook.DefaultFnName;
-
+
f:write([[<!DOCTYPE html><html>
<head>
- <title>MCServer API - ]], HookName, [[ Hook</title>
+ <title>Cuberite API - ]], HookName, [[ Hook</title>
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="stylesheet" type="text/css" href="prettify.css" />
<script src="prettify.js"></script>
@@ -330,7 +330,7 @@ local function WriteHooks(f, a_Hooks, a_UndocumentedHooks, a_HookNav)
A plugin can decide whether it will let the event pass through to the rest of the plugins, or hide it
from them. This is determined by the return value from the hook callback function. If the function
returns false or no value, the event is propagated further. If the function returns true, the processing
- is stopped, no other plugin receives the notification (and possibly MCServer disables the default
+ is stopped, no other plugin receives the notification (and possibly Cuberite disables the default
behavior for the event). See each hook's details to see the exact behavior.</p>
<table>
<tr>
@@ -371,7 +371,7 @@ local function ReadDescriptions(a_API)
end
return false;
end
-
+
-- Returns true if the function is to be ignored
local function IsFunctionIgnored(a_ClassName, a_FnName)
if (g_APIDesc.IgnoreFunctions == nil) then
@@ -389,7 +389,7 @@ local function ReadDescriptions(a_API)
end
return false;
end
-
+
-- Returns true if the constant (specified by its fully qualified name) is to be ignored
local function IsConstantIgnored(a_CnName)
if (g_APIDesc.IgnoreConstants == nil) then
@@ -402,7 +402,7 @@ local function ReadDescriptions(a_API)
end
return false;
end
-
+
-- Returns true if the member variable (specified by its fully qualified name) is to be ignored
local function IsVariableIgnored(a_VarName)
if (g_APIDesc.IgnoreVariables == nil) then
@@ -415,7 +415,7 @@ local function ReadDescriptions(a_API)
end
return false;
end
-
+
-- Remove ignored classes from a_API:
local APICopy = {};
for _, cls in ipairs(a_API) do
@@ -433,7 +433,7 @@ local function ReadDescriptions(a_API)
cls.ConstantGroups = {};
cls.NumConstantsInGroups = 0;
cls.NumConstantsInGroupsForDescendants = 0;
-
+
-- Rename special functions:
for _, fn in ipairs(cls.Functions) do
if (fn.Name == ".call") then
@@ -456,13 +456,13 @@ local function ReadDescriptions(a_API)
fn.Name = "<i>operator ==</i>";
end
end
-
+
local APIDesc = g_APIDesc.Classes[cls.Name];
if (APIDesc ~= nil) then
APIDesc.IsExported = true;
cls.Desc = APIDesc.Desc;
cls.AdditionalInfo = APIDesc.AdditionalInfo;
-
+
-- Process inheritance:
if (APIDesc.Inherits ~= nil) then
for _, icls in ipairs(a_API) do
@@ -476,13 +476,13 @@ local function ReadDescriptions(a_API)
cls.UndocumentedFunctions = {}; -- This will contain names of all the functions that are not documented
cls.UndocumentedConstants = {}; -- This will contain names of all the constants that are not documented
cls.UndocumentedVariables = {}; -- This will contain names of all the variables that are not documented
-
+
local DoxyFunctions = {}; -- This will contain all the API functions together with their documentation
-
+
local function AddFunction(a_Name, a_Params, a_Return, a_Notes)
table.insert(DoxyFunctions, {Name = a_Name, Params = a_Params, Return = a_Return, Notes = a_Notes});
end
-
+
if (APIDesc.Functions ~= nil) then
-- Assign function descriptions:
for _, func in ipairs(cls.Functions) do
@@ -508,7 +508,7 @@ local function ReadDescriptions(a_API)
FnDesc.IsExported = true;
end
end -- for j, func
-
+
-- Replace functions with their described and overload-expanded versions:
cls.Functions = DoxyFunctions;
else -- if (APIDesc.Functions ~= nil)
@@ -519,7 +519,7 @@ local function ReadDescriptions(a_API)
end
end
end -- if (APIDesc.Functions ~= nil)
-
+
if (APIDesc.Constants ~= nil) then
-- Assign constant descriptions:
for _, cons in ipairs(cls.Constants) do
@@ -541,7 +541,7 @@ local function ReadDescriptions(a_API)
end
end
end -- else if (APIDesc.Constants ~= nil)
-
+
-- Assign member variables' descriptions:
if (APIDesc.Variables ~= nil) then
for _, var in ipairs(cls.Variables) do
@@ -565,7 +565,7 @@ local function ReadDescriptions(a_API)
end
end
end -- else if (APIDesc.Variables ~= nil)
-
+
if (APIDesc.ConstantGroups ~= nil) then
-- Create links between the constants and the groups:
local NumInGroups = 0;
@@ -590,7 +590,7 @@ local function ReadDescriptions(a_API)
if (group.ShowInDescendants) then
NumInDescendantGroups = NumInDescendantGroups + NumInGroup;
end
-
+
-- Sort the constants:
table.sort(group.Constants,
function(c1, c2)
@@ -601,7 +601,7 @@ local function ReadDescriptions(a_API)
cls.ConstantGroups = APIDesc.ConstantGroups;
cls.NumConstantsInGroups = NumInGroups;
cls.NumConstantsInGroupsForDescendants = NumInDescendantGroups;
-
+
-- Remove grouped constants from the normal list:
local NewConstants = {};
for _, cons in ipairs(cls.Constants) do
@@ -611,9 +611,9 @@ local function ReadDescriptions(a_API)
end
cls.Constants = NewConstants;
end -- if (ConstantGroups ~= nil)
-
+
else -- if (APIDesc ~= nil)
-
+
-- Class is not documented at all, add all its members to Undocumented lists:
cls.UndocumentedFunctions = {};
cls.UndocumentedConstants = {};
@@ -637,7 +637,7 @@ local function ReadDescriptions(a_API)
end
end -- for j, var - cls.Variables[]
end -- else if (APIDesc ~= nil)
-
+
-- Remove ignored functions:
local NewFunctions = {};
for _, fn in ipairs(cls.Functions) do
@@ -660,7 +660,7 @@ local function ReadDescriptions(a_API)
return (f1.Name < f2.Name);
end
);
-
+
-- Remove ignored constants:
local NewConstants = {};
for _, cn in ipairs(cls.Constants) do
@@ -669,14 +669,14 @@ local function ReadDescriptions(a_API)
end
end -- for j, cn
cls.Constants = NewConstants;
-
+
-- Sort the constants:
table.sort(cls.Constants,
function(c1, c2)
return (c1.Name < c2.Name);
end
);
-
+
-- Remove ignored member variables:
local NewVariables = {};
for _, var in ipairs(cls.Variables) do
@@ -685,7 +685,7 @@ local function ReadDescriptions(a_API)
end
end -- for j, var
cls.Variables = NewVariables;
-
+
-- Sort the member variables:
table.sort(cls.Variables,
function(v1, v2)
@@ -693,7 +693,7 @@ local function ReadDescriptions(a_API)
end
);
end -- for i, cls
-
+
-- Sort the descendants lists:
for _, cls in ipairs(a_API) do
table.sort(cls.Descendants,
@@ -738,7 +738,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
LOGINFO("Cannot write HTML API for class " .. a_ClassAPI.Name .. ": " .. err)
return;
end
-
+
-- Writes a table containing all functions in the specified list, with an optional "inherited from" header when a_InheritedName is valid
local function WriteFunctions(a_Functions, a_InheritedName)
if (#a_Functions == 0) then
@@ -757,7 +757,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
end
cf:write("</table>\n");
end
-
+
local function WriteConstantTable(a_Constants, a_Source)
cf:write("<table>\n<tr><th>Name</th><th>Value</th><th>Notes</th></tr>\n");
for _, cons in ipairs(a_Constants) do
@@ -767,22 +767,22 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
end
cf:write("</table>\n\n");
end
-
+
local function WriteConstants(a_Constants, a_ConstantGroups, a_NumConstantGroups, a_InheritedName)
if ((#a_Constants == 0) and (a_NumConstantGroups == 0)) then
return;
end
-
+
local Source = a_ClassAPI.Name
if (a_InheritedName ~= nil) then
cf:write("<h2>Constants inherited from ", a_InheritedName, "</h2>\n");
Source = a_InheritedName;
end
-
+
if (#a_Constants > 0) then
WriteConstantTable(a_Constants, Source);
end
-
+
for _, group in pairs(a_ConstantGroups) do
if ((a_InheritedName == nil) or group.ShowInDescendants) then
cf:write("<a name='", group.Name, "'><p>");
@@ -792,16 +792,16 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
end
end
end
-
+
local function WriteVariables(a_Variables, a_InheritedName)
if (#a_Variables == 0) then
return;
end
-
+
if (a_InheritedName ~= nil) then
cf:write("<h2>Member variables inherited from ", a_InheritedName, "</h2>\n");
end
-
+
cf:write("<table><tr><th>Name</th><th>Type</th><th>Notes</th></tr>\n");
for _, var in ipairs(a_Variables) do
cf:write("<tr><td>", var.Name, "</td>\n");
@@ -810,7 +810,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
end
cf:write("</table>\n\n");
end
-
+
local function WriteDescendants(a_Descendants)
if (#a_Descendants == 0) then
return;
@@ -823,7 +823,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
end
cf:write("</ul>\n");
end
-
+
local ClassName = a_ClassAPI.Name;
-- Build an array of inherited classes chain:
@@ -833,10 +833,10 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
table.insert(InheritanceChain, CurrInheritance);
CurrInheritance = CurrInheritance.Inherits;
end
-
+
cf:write([[<!DOCTYPE html><html>
<head>
- <title>MCServer API - ]], a_ClassAPI.Name, [[ Class</title>
+ <title>Cuberite API - ]], a_ClassAPI.Name, [[ Class</title>
<link rel="stylesheet" type="text/css" href="main.css" />
<link rel="stylesheet" type="text/css" href="prettify.css" />
<script src="prettify.js"></script>
@@ -861,9 +861,9 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
</td><td style="vertical-align: top;"><h1>Contents</h1>
<p><ul>
]]);
-
+
local HasInheritance = ((#a_ClassAPI.Descendants > 0) or (a_ClassAPI.Inherits ~= nil));
-
+
local HasConstants = (#a_ClassAPI.Constants > 0) or (a_ClassAPI.NumConstantsInGroups > 0);
local HasFunctions = (#a_ClassAPI.Functions > 0);
local HasVariables = (#a_ClassAPI.Variables > 0);
@@ -872,7 +872,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
HasFunctions = HasFunctions or (#cls.Functions > 0);
HasVariables = HasVariables or (#cls.Variables > 0);
end
-
+
-- Write the table of contents:
if (HasInheritance) then
cf:write("<li><a href=\"#inherits\">Inheritance</a></li>\n");
@@ -892,7 +892,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
end
end
cf:write("</ul></p>\n");
-
+
-- Write the class description:
cf:write("<hr /><a name=\"desc\"><h1>", ClassName, " class</h1></a>\n");
if (a_ClassAPI.Desc ~= nil) then
@@ -900,7 +900,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
cf:write(LinkifyString(a_ClassAPI.Desc, ClassName));
cf:write("</p>\n\n");
end;
-
+
-- Write the inheritance, if available:
if (HasInheritance) then
cf:write("<hr /><a name=\"inherits\"><h1>Inheritance</h1></a>\n");
@@ -917,7 +917,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
cf:write("</p>\n\n");
end
end
-
+
-- Write the constants:
if (HasConstants) then
cf:write("<a name=\"constants\"><hr /><h1>Constants</h1></a>\n");
@@ -927,7 +927,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
WriteConstants(cls.Constants, cls.ConstantGroups, cls.NumConstantsInGroupsForDescendants, cls.Name);
end;
end;
-
+
-- Write the member variables:
if (HasVariables) then
cf:write("<a name=\"variables\"><hr /><h1>Member variables</h1></a>\n");
@@ -937,7 +937,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
WriteVariables(cls.Variables, cls.Name);
end;
end
-
+
-- Write the functions, including the inherited ones:
if (HasFunctions) then
cf:write("<a name=\"functions\"><hr /><h1>Functions</h1></a>\n");
@@ -947,7 +947,7 @@ local function WriteHtmlClass(a_ClassAPI, a_ClassMenu)
WriteFunctions(cls.Functions, cls.Name);
end
end
-
+
-- Write the additional infos:
if (a_ClassAPI.AdditionalInfo ~= nil) then
for i, additional in ipairs(a_ClassAPI.AdditionalInfo) do
@@ -969,7 +969,7 @@ end
local function WriteClasses(f, a_API, a_ClassMenu)
f:write([[
<a name="classes"><h2>Class index</h2></a>
- <p>The following classes are available in the MCServer Lua scripting language:
+ <p>The following classes are available in the Cuberite Lua scripting language:
<ul>
]]);
for _, cls in ipairs(a_API) do
@@ -1005,7 +1005,7 @@ local function ListUndocumentedObjects(API, UndocumentedHooks)
f:write("\t\t\tDesc = \"\"\n");
end
end
-
+
if (HasFunctions) then
f:write("\t\t\tFunctions =\n\t\t\t{\n");
table.sort(cls.UndocumentedFunctions);
@@ -1014,7 +1014,7 @@ local function ListUndocumentedObjects(API, UndocumentedHooks)
end -- for j, fn - cls.UndocumentedFunctions[]
f:write("\t\t\t},\n\n");
end
-
+
if (HasConstants) then
f:write("\t\t\tConstants =\n\t\t\t{\n");
table.sort(cls.UndocumentedConstants);
@@ -1023,7 +1023,7 @@ local function ListUndocumentedObjects(API, UndocumentedHooks)
end -- for j, fn - cls.UndocumentedConstants[]
f:write("\t\t\t},\n\n");
end
-
+
if (HasVariables) then
f:write("\t\t\tVariables =\n\t\t\t{\n");
table.sort(cls.UndocumentedVariables);
@@ -1032,13 +1032,13 @@ local function ListUndocumentedObjects(API, UndocumentedHooks)
end -- for j, fn - cls.UndocumentedVariables[]
f:write("\t\t\t},\n\n");
end
-
+
if (HasFunctions or HasConstants or HasVariables) then
f:write("\t\t},\n\n");
end
end -- for i, cls - API[]
f:write("\t},\n");
-
+
if (#UndocumentedHooks > 0) then
f:write("\n\tHooks =\n\t{\n");
for i, hook in ipairs(UndocumentedHooks) do
@@ -1118,19 +1118,19 @@ local function ListMissingPages()
end;
g_Stats.NumTrackedLinks = NumLinks;
g_TrackedPages = {};
-
+
if (#MissingPages == 0) then
-- No missing pages, congratulations!
return;
end
-
+
-- Sort the pages by name:
table.sort(MissingPages,
function (Page1, Page2)
return (Page1.Name < Page2.Name);
end
);
-
+
-- Output the pages:
local f, err = io.open("API/_missingPages.txt", "w");
if (f == nil) then
@@ -1163,7 +1163,7 @@ local function WriteStats(f)
else
Color = "red";
end
-
+
local meter = {
"\n",
"<div style=\"background-color: black; padding: 1px; width: 100px\">\n",
@@ -1177,7 +1177,7 @@ local function WriteStats(f)
};
return table.concat(meter, "");
end
-
+
f:write([[
<hr /><a name="docstats"><h2>Documentation statistics</h2></a>
<table><tr><th>Object</th><th>Total</th><th>Documented</th><th>Undocumented</th><th colspan="2">Documented %</th></tr>
@@ -1205,13 +1205,13 @@ local function WriteStats(f)
f:write("</td><td>", g_Stats.NumUndocumentedConstants);
f:write("</td><td>", ExportMeter(100 * (g_Stats.NumTotalConstants - g_Stats.NumUndocumentedConstants) / g_Stats.NumTotalConstants));
f:write("</td></tr>\n");
-
+
f:write("<tr><td>Hooks</td><td>", g_Stats.NumTotalHooks);
f:write("</td><td>", g_Stats.NumTotalHooks - g_Stats.NumUndocumentedHooks);
f:write("</td><td>", g_Stats.NumUndocumentedHooks);
f:write("</td><td>", ExportMeter(100 * (g_Stats.NumTotalHooks - g_Stats.NumUndocumentedHooks) / g_Stats.NumTotalHooks));
f:write("</td></tr>\n");
-
+
f:write([[
</table>
<p>There are ]], g_Stats.NumTrackedLinks, " internal links, ", g_Stats.NumInvalidLinks, " of them are invalid.</p>"
@@ -1224,7 +1224,7 @@ end
local function DumpAPIHtml(a_API)
LOG("Dumping all available functions and constants to API subfolder...");
-
+
-- Create the output folder
if not(cFile:IsFolder("API")) then
cFile:CreateFolder("API");
@@ -1257,7 +1257,7 @@ local function DumpAPIHtml(a_API)
end
);
ReadHooks(Hooks);
-
+
-- Create a "class index" file, write each class as a link to that file,
-- then dump class contents into class-specific file
LOG("Writing HTML files...");
@@ -1277,7 +1277,7 @@ local function DumpAPIHtml(a_API)
table.insert(ClassMenuTab, "</a><br />");
end
local ClassMenu = table.concat(ClassMenuTab, "");
-
+
-- Create a hook navigation menu that will be inserted into each hook file for faster navigation(#403)
local HookNavTab = {};
for _, hook in ipairs(Hooks) do
@@ -1288,18 +1288,18 @@ local function DumpAPIHtml(a_API)
table.insert(HookNavTab, "</a><br />");
end
local HookNav = table.concat(HookNavTab, "");
-
+
-- Write the HTML file:
f:write([[<!DOCTYPE html>
<html>
<head>
- <title>MCServer API - Index</title>
+ <title>Cuberite API - Index</title>
<link rel="stylesheet" type="text/css" href="main.css" />
</head>
<body>
<div id="content">
<header>
- <h1>MCServer API - Index</h1>
+ <h1>Cuberite API - Index</h1>
<hr />
</header>
<p>The API reference is divided into the following sections:</p>
@@ -1311,11 +1311,11 @@ local function DumpAPIHtml(a_API)
</ul>
<hr />
]]);
-
+
WriteArticles(f);
WriteClasses(f, a_API, ClassMenu);
WriteHooks(f, Hooks, UndocumentedHooks, HookNav);
-
+
-- Copy the static files to the output folder:
local StaticFiles =
{
@@ -1328,7 +1328,7 @@ local function DumpAPIHtml(a_API)
cFile:Delete("API/" .. fnam);
cFile:Copy(g_Plugin:GetLocalFolder() .. "/" .. fnam, "API/" .. fnam);
end
-
+
-- List the documentation problems:
LOG("Listing leftovers...");
ListUndocumentedObjects(a_API, UndocumentedHooks);
@@ -1336,12 +1336,12 @@ local function DumpAPIHtml(a_API)
ListMissingPages();
WriteStats(f);
-
+
f:write([[</ul></div>]])
f:write(GetHtmlTimestamp())
f:write([[</body></html>]])
f:close()
-
+
LOG("API subfolder written");
end
@@ -1354,16 +1354,16 @@ 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
@@ -1405,21 +1405,21 @@ end
---- Writes one MCS class definition into the specified file in ZBS format
+--- Writes one Cuberite 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")
@@ -1437,12 +1437,12 @@ local function DumpAPIZBS(a_API)
LOG("Cannot open mcserver_lua.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("-- This is a Cuberite 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
@@ -1452,13 +1452,13 @@ local function DumpAPIZBS(a_API)
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()
@@ -1480,21 +1480,21 @@ local function IsDeclaredDescendant(a_DescendantName, a_BaseName, a_API)
end
assert(type(a_API[a_BaseName]) == "table", "Not a class name: " .. a_BaseName)
assert(type(a_API[a_BaseName].Descendants) == "table")
-
+
-- Check direct inheritance:
for _, desc in ipairs(a_API[a_BaseName].Descendants) do
if (desc.Name == a_DescendantName) then
return true
end
end -- for desc - a_BaseName's descendants
-
+
-- Check indirect inheritance:
for _, desc in ipairs(a_API[a_BaseName].Descendants) do
if (IsDeclaredDescendant(a_DescendantName, desc.Name, a_API)) then
return true
end
end -- for desc - a_BaseName's descendants
-
+
return false
end
@@ -1509,7 +1509,7 @@ local function CheckClassInheritance(a_Class, a_API, a_Report)
assert(type(a_Class) == "table")
assert(type(a_API) == "table")
assert(type(a_Report) == "table")
-
+
-- Check that the declared descendants are really descendants:
local registry = debug.getregistry()
for _, desc in ipairs(a_Class.Descendants or {}) do
@@ -1519,7 +1519,7 @@ local function CheckClassInheritance(a_Class, a_API, a_Report)
table.insert(a_Report, desc.Name .. " is not a descendant of " .. a_Class.Name)
end
end -- for desc - a_Class.Descendants[]
-
+
-- Check that all inheritance is listed for the class:
local parents = registry["tolua_super"][_G[a_Class.Name]] -- map of "classname" -> true for each class that a_Class inherits
for clsName, isParent in pairs(parents or {}) do
@@ -1544,7 +1544,7 @@ local function CheckAPIDescendants(a_API)
CheckClassInheritance(cls, a_API, report)
end
end
-
+
-- If there's anything to report, output it to a file:
if (report[1] ~= nil) then
LOG("There are inheritance errors in the API description:")
@@ -1568,7 +1568,7 @@ end
local function DumpApi()
LOG("Dumping the API...")
-
+
-- Load the API descriptions from the Classes and Hooks subfolders:
-- This needs to be done each time the command is invoked because the export modifies the tables' contents
dofile(g_PluginFolder .. "/APIDesc.lua")
@@ -1598,10 +1598,10 @@ local function DumpApi()
NumTrackedLinks = 0,
NumInvalidLinks = 0,
}
-
+
-- Create the API tables:
local API, Globals = CreateAPITables();
-
+
-- Sort the classes by name:
table.sort(API,
function (c1, c2)
@@ -1609,24 +1609,24 @@ local function DumpApi()
end
);
g_Stats.NumTotalClasses = #API;
-
+
-- Add Globals into the API:
Globals.Name = "Globals";
table.insert(API, Globals);
-
+
-- Read in the descriptions:
LOG("Reading descriptions...");
ReadDescriptions(API);
-- Check that the API lists the inheritance properly, report any problems to a file:
CheckAPIDescendants(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
@@ -1671,20 +1671,15 @@ end
function Initialize(Plugin)
g_Plugin = Plugin;
g_PluginFolder = Plugin:GetLocalFolder();
-
+
LOG("Initialising " .. Plugin:GetName() .. " v." .. Plugin:GetVersion())
-
+
-- Bind a console command to dump the API:
cPluginManager:BindConsoleCommand("api", HandleCmdApi, "Dumps the Lua API docs into the API/ subfolder")
cPluginManager:BindConsoleCommand("apishow", HandleCmdApiShow, "Runs the default browser to show the API docs")
-- Add a WebAdmin tab that has a Dump button
g_Plugin:AddWebTab("APIDump", HandleWebAdminDump)
-
+
return true
end
-
-
-
-
-